使用session时,在不带ASP.NET_SessionId这个cookie去请求的时候,服务器端会生成一个sessionID放到cookie里面,下次带过去。
但是在ASP.NET MVC4项目中,每次请求服务器端都生成了新的sessionID,因为服务器端的headers里面没有set-cookie这一项,实在很让人困惑啊。
对比webform项目和asp.net mvc4项目如下(都是示例项目)
webform:
在请求头中没有cookie的时候,服务器端有set-cookie
ASP.NET MVC4:
因为都是开发服务器(domain都是localhost),所以关闭浏览器程序打开,再去测试mvc的
可以看到客户端没有cookie,服务器端也没有set-cookie,这就导致每次请求得到的都是一个新的sessionID
不知道大家有没有遇到过这个问题。。我也觉得很奇怪,不知道问题出在哪里,用cookieless模式是正常的。
求助啊
给请求所对应的Controller加上标记[SessionState(SessionStateBehavior.Required)]试试
不好使
好像在MVC中,不去给Session添加键值,就不会给Response添加set-cookie。
目前是只需要一个标识会话的SessionID,Session中其实是没有存数据的。
想到的一个取巧的办法,就是
先Session["test"] = 123;
然后Session.RemoveAll();
他就会给Response添加一个cookie,目的就达到了。。
@空葫芦: MVC这样设计更合理
@dudu: 可能有他的道理吧。。
刚才看过reflector试了一下
这么去写也不好使,换一种思路搞咯0.0~~~~
[code=csharp]
SessionIDManager manage = new SessionIDManager();
bool flag1, flag2;
manage.SaveSessionID(System.Web.HttpContext.Current, Session.SessionID, out flag1, out flag2);
[/code]
对比下 web.config 的设置。
在 headers 添加一个 Set-Cookie 不就行了
不是加不加的问题。。
是要搞清楚这是什么问题。默认的话大家用session还需要加个set-cookie吗,不需要吧。
所以要搞清楚为什么啊
@空葫芦: 如果没有设置Set-Cookie,那客户端就不会带回SESSIONID, 服务器也就每次会产生一个新的SESSIONID
@Yu: 你所说的设置set-cookie是指手动添加一个name为ASP.NET_SessionId,value为sessionID的cookie到Response?