Существуют три метода передачи идентификатора сессии:
Cookies
параметр GET или POST запросов HTTP
Модификация URL
Куки в браузере могут быть включены или выключены пользователем в настройках браузера.
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.
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-набору безопасности каждого приложения должно быть назначено уникальное имя