Как поместить идентификатор сессии в параметр GET, а не в URL?

Разработка на C# под linux
http://stackoverflow.com/questions/31459612/how-to-place-session-id-into-get-parameter-of-http-request-instead-of-url-in-coo
ASP.NET state service
Как записывать XML-тег "sessionState" в файле web.Config
что мы знаем про сессии вообще
первый вызов, без идентификатора сессии

Существуют три метода передачи идентификатора сессии: Куки в браузере могут быть включены или выключены пользователем в настройках браузера.

ASP.NET AJAX

Settings that use cookies encoded in the URL are not supported by the ASP.NET AJAX client script libraries.
вот не было печали, знать бы ещё, что это за клиентские библиотеки такие, зачем они нужны, как работают, когда их использовать, как доработать для поддержки "session ID passed in the request"

When you configure an AJAX-enabled ASP.NET Web site, use only the default value of UseCookies for the cookieless attribute.
ну спасибо за совет, чё

maximum permissible URI length

If the combination of the
anonymous identification ticket,
forms authentication ticket,
session ID, and
user data
is greater than the maximum permissible URI length, the request will fail with a 400-Bad Request error.

Много видов тикетов и ни одной ссылки на страницы, где про их использование каждого из них написано. Плохая у MS документация.

Session_End

There's a Session_End event in global.asax which you can use to detect when sessions end.


“If session expiration from ASP.NET page it will automatically redirect to login page.”
http://www.aspsnippets.com/Articles/Reload-Refresh-and-Redirect-Pages-using-Meta-Tags-in-ASP.Net.aspx
http://forums.asp.net/t/1767976.aspx/1
https://msmvps.com/blogs/shahed/archive/2007/09/05/redirect-to-login-page-on-session-expiration-asp-net.aspx

http://csharpdotnetfreak.blogspot.com/2008/11/detecting-session-timeout-and-redirect.html
I have set session timeout for one minute , it expires if inactivity is for 1 minute , otherwise not
you can try setting SlidingExpiration = true in web.config is your session is timing out after certain time irrespective of activity/inactivity

Как выглядит ID по-умолчанию?

http://yourserver/folder/(session ID here)/default.aspx

Вот конкретный пример:
http://127.0.0.1:8085/(A1471828581099FE96B6164D)/index.aspx

Кто использует куки?

In ASP.NET, session management and forms authentication are the only two system features that use cookies under the hood.
Аутентификация может работать и в Cookieless-режиме, начиная с ASP .NET 2.0

IHttpHandler

Asp.Net provides a mechanism for implementing global methods by implementing the IHttpHandler interface.
IHttpHandler allows the programmer to capture and handle events thrown by an instance of the HttpApplication object that processes all incoming requests, in essence, the controller in an MVC architecture.
HttpApplication throws a whole array of events at different points in the lifetime of processing a page.
The IHttpHandler interface requires that we implement one method, public void Init (HttpApplication application).
let's register a handler for setting up session state.
application.AcquireRequestState += new EventHandler(this.Application_AcquiredSession);
Now, in our handler we can see whether our posted data is still available:
private void Application_AcquiredSession(Object source, EventArgs e)
{
    HttpRequest req = HttpContext.Current.Request;
    string reqtype = req.RequestType;
}
I've used a call to HttpContext.Current instead of casting the source object to an HttpApplication. In our module, it wouldn't make much difference, but in other modules the event might be thrown by something different then an HttpApplication, so the call to HttpContext.Current will always be safe.
If we now run our debugger, we can see that the request is already a GET request.
The request is redirected before the session is acquired. This makes it a little bit difficult to make an all-purpose module because we can't use Session.IsCookieless to detect whether the session is cookieless. Our only alternative is to read the web.config file directly.
I haven't done much research into this subject, but I'm sure there's a solution on how to read elements from the web.config file differing from the <appsettings> element.

There's some discrepency on how Asp.Net goes about processing IHttpModules. MSDN tells us that each request gets a unique instance of an IHttpModule. After processing, the module goes back into a pool to be effectively recycled. This is why we have to implement the IDisposable interface.
each module could be handling many requests at once. If this happens to be the case, we can assume that only the EventHandlers are thread safe and the lock is maintained by HttpApplication.
to register our custom module in web.config. In the system.web section, we add:
    <httpModules>
        <add type="CookielessPostFixModule, OurModule" name="CookielessPostFixModule" />
    </httpModules>

ApplyAppPathModifier

call to HttpRequest.ApplyAppPathModifier. This method returns the path modified with the inserted session id.

Как это делают в PHP

<a href="nextpage.php?<?php echo htmlspecialchars(SID); ?>">Нажмите сюда</a>, чтобы продолжить.

Подразумевается, что абсолютные (полные, неотностельные) URL указывают только на внешние сайты и потому SID к ним не добавляется, так как включенная по умолчанию отправка увеличивала бы риски в области безопасности, в частности, риск утечки SID другому серверу.

если при компиляции PHP была использована опция --enable-trans-sid,
то вызов функции htmlspecialchars вписывать руками не надо,
он записывается (при выключенных куках) в страницу автоматически

Разница между форматами идентификаторов

Можно ли на ASP .NET закодировать трекинг сессий, совместимый с сессиями PHP-сайта? Поскольку закодировать можно всё, то как конкретно это сделать?

PHP generates id that is 26 characters long and
ASP.NET generates one that is 24 characters long

Название куки в ASP .NET:
cookieName. Optional String attribute. This attribute is new in the .NET Framework version 2.0.
Specifies the name of the cookie that stores the session identifier.
The default is "ASP.NET_SessionId".

в PHP
browser storing the sesssion cookie as PHPSESSID

ini_set('session.name', 'DOMAIN1');
Sometimes ini_set plays up and is unable to set the ini values correctly, might be down to permissions.

<?
if(ini_set('session.name', 'DOMAIN1') === false || !session_name('DOMAIN1'))
{
    die('Unable to set session scope');
}

phpinfo();
?>

Имя cookie-набора HTTP для использования в аутентификации (по умолчанию .ASPXAUTH).
Если множество приложений работают на одном веб-сервере,
каждому cookie-набору безопасности каждого приложения должно быть назначено уникальное имя