首页 新闻 会员 周边

ASP.NET MVC下服务器响应头没有set-cookie,导致每次请求都生成新的sessionID

0
悬赏园豆:10 [已解决问题] 解决于 2013-08-22 14:58

使用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模式是正常的。
求助啊

空葫芦的主页 空葫芦 | 初学一级 | 园豆:9
提问于:2013-08-22 11:39
< >
分享
最佳答案
0

给请求所对应的Controller加上标记[SessionState(SessionStateBehavior.Required)]试试

收获园豆:4
dudu | 高人七级 |园豆:31007 | 2013-08-22 13:38

不好使

好像在MVC中,不去给Session添加键值,就不会给Response添加set-cookie。

目前是只需要一个标识会话的SessionID,Session中其实是没有存数据的。

想到的一个取巧的办法,就是

先Session["test"] = 123;

然后Session.RemoveAll();

他就会给Response添加一个cookie,目的就达到了。。

空葫芦 | 园豆:9 (初学一级) | 2013-08-22 13:53

@空葫芦: MVC这样设计更合理

dudu | 园豆:31007 (高人七级) | 2013-08-22 13:56

@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]

空葫芦 | 园豆:9 (初学一级) | 2013-08-22 14:30
其他回答(2)
0

对比下 web.config 的设置。

收获园豆:4
Launcher | 园豆:45045 (高人七级) | 2013-08-22 11:42
0

在 headers 添加一个 Set-Cookie 不就行了

收获园豆:2
Yu | 园豆:12980 (专家六级) | 2013-08-22 11:45

不是加不加的问题。。

是要搞清楚这是什么问题。默认的话大家用session还需要加个set-cookie吗,不需要吧。

所以要搞清楚为什么啊

支持(0) 反对(0) 空葫芦 | 园豆:9 (初学一级) | 2013-08-22 12:30

@空葫芦: 如果没有设置Set-Cookie,那客户端就不会带回SESSIONID, 服务器也就每次会产生一个新的SESSIONID

支持(0) 反对(0) Yu | 园豆:12980 (专家六级) | 2013-08-22 12:41

@Yu: 你所说的设置set-cookie是指手动添加一个name为ASP.NET_SessionId,value为sessionID的cookie到Response?

支持(0) 反对(0) 空葫芦 | 园豆:9 (初学一级) | 2013-08-22 13:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册