IRequiresSessionState does not work
本文关键字:work not does IRequiresSessionState | 更新日期: 2023-09-27 18:14:16
我已经纠结了一段时间了。
我用以下代码实现了一个基本的IHttpHandler,并且SESSION不断更新:
namespace ClassLibrary1
{
public class MyHandler : IHttpHandler, IRequiresSessionState
{
public bool IsReusable
{
get
{
return true;
}
}
public void ProcessRequest(HttpContext context)
{
context.Response.Write(context.Session.SessionID + "</br>");
context.Response.Write(DateTime.Now.TimeOfDay.ToString() + "</br>");
}
}
}
如您所见,非常简单的代码。然后我简单地创建一个文件夹c:'Inetpub'wwwroot'Test。然后,我添加了一个bin文件夹,并将我的dll放入bin文件夹。
我的网页。配置文件看起来像这样:
<configuration>
<system.webServer>
<handlers>
<add verb="*.x" path="*" name="MyHandler" type="ClassLibrary1.MyHandler" />
</handlers>
</system.webServer>
</configuration>
然后我打开IIS (IIS 7.0),我必须右键单击默认网站下的测试文件夹,然后单击转换为应用程序。这使它成为一个站点。
然后打开浏览器进入http://localhost/Test/
我得到这样的东西:fxnjswtkkzs1silahvpf5xun09:48:52.9194609
按F5键或刷新界面,会话id会发生变化。这是不应该发生的。
我就是想不明白。有趣的是,它昨天还起作用了。谁能帮帮我....
ps,在firefox和ie中有相同的行为
thanks in advance
是的,你应该得到一个新的SessionID
每一次,不仅在你的GenericHandler,而且在一个简单的ASPX页面除非你访问你的Session
对象。试试这个:
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
object o = context.Session["counter"];
if (o == null)
context.Session["counter"] = 1;
else
context.Session["counter"] = ((int) o) + 1;
context.Response.Write(context.Session.SessionID + "'r'n");
context.Response.Write(context.Session["counter"]);
}