但是在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模式是正常的。
求助啊
10 个解决方案
#1
HttpCookie cookie = new HttpCookie("MyCookieName", "hohoho");
Response.Cookies.Add(cookie);
使用这样的语句手动写cookie到客户端是可以的。
会在响应头里面发现“Set-Cookie MyCookieName=hohoho; path=/”
那session那里是出了什么问题呢?
#2
你session里有存值吗
session没有存值的情况下是不会在服务器端生成的
session没有存值的情况下是不会在服务器端生成的
#3
若服务器没有设置cookie 和Session
客户端的SessionID 每次都是变化的,每次都new一个
一旦设置 设置cookie或Session任意一个,sessionID将固定下来。
客户端的SessionID 每次都是变化的,每次都new一个
一旦设置 设置cookie或Session任意一个,sessionID将固定下来。
#4
看来是这个问题
session不存值的话,虽然有生成的sessionID了,但是不会给响应头添加set-cookie
能不能再请教个问题,除了Session["test"] = 123;这样赋值使用的形式,有什么简单直接的方式让Session向客户端发送set-cookie吗?
还是说只能手动去写set-cookie,然后把sessionID的值给ASP.NET_SessionId?
#5
你说的设置是指填充值是吗?
刚才试了下,session添加值是可以的,cookie里面添加值不影响。
能不能再请教个问题,除了Session["test"] = 123;这样赋值使用的形式,有什么简单直接的方式让Session向客户端发送set-cookie吗?
还是说只能手动去写set-cookie,然后把sessionID的值给ASP.NET_SessionId?
#6
为什么需要生成sessionID?直接说下需求吧
session不存在的话,就算生成sessionid,下次访问也无法找到匹配的session的
#7
你session里有存值吗
session没有存值的情况下是不会在服务器端生成的
看来是这个问题
session不存值的话,虽然有生成的sessionID了,但是不会给响应头添加set-cookie
能不能再请教个问题,除了Session["test"] = 123;这样赋值使用的形式,有什么简单直接的方式让Session向客户端发送set-cookie吗?
还是说只能手动去写set-cookie,然后把sessionID的值给ASP.NET_SessionId?
为什么需要生成sessionID?直接说下需求吧
session不存在的话,就算生成sessionid,下次访问也无法找到匹配的session的
需要一个标识会话的KEY,然后缓存中有些数据存储的时候,键是根据会话KEY拼接的,理所当然地想到了用sessionID。
不过既然如此的话,就存一部分数据到session好了,这样就触发服务器端向客户端发送set-cookie。
#8
你session里有存值吗
session没有存值的情况下是不会在服务器端生成的
看来是这个问题
session不存值的话,虽然有生成的sessionID了,但是不会给响应头添加set-cookie
能不能再请教个问题,除了Session["test"] = 123;这样赋值使用的形式,有什么简单直接的方式让Session向客户端发送set-cookie吗?
还是说只能手动去写set-cookie,然后把sessionID的值给ASP.NET_SessionId?
为什么需要生成sessionID?直接说下需求吧
session不存在的话,就算生成sessionid,下次访问也无法找到匹配的session的
或者在使用SessionID之前,这样写
Session["Activation"] = 1;
Session.RemoveAll();
有点丑,不过能解决问题
Reflector看看MVC下的Session第一次添加值会做什么,看看有没有好一点的办法,不行就这样了。
#9
而且,ASP.NET MVC和Webform下的处理居然是不同的。
webform下不赋值也直接会给客户端发送set-cooke
webform下不赋值也直接会给客户端发送set-cooke
#10
今天也遇到这个奇葩问题,在Global 加上这段代码就OK了。
protected void Session_Start(object sender, EventArgs e)
{
}
protected void Session_End(object sender, EventArgs e)
{
}
protected void Session_Start(object sender, EventArgs e)
{
}
protected void Session_End(object sender, EventArgs e)
{
}
#1
HttpCookie cookie = new HttpCookie("MyCookieName", "hohoho");
Response.Cookies.Add(cookie);
使用这样的语句手动写cookie到客户端是可以的。
会在响应头里面发现“Set-Cookie MyCookieName=hohoho; path=/”
那session那里是出了什么问题呢?
#2
你session里有存值吗
session没有存值的情况下是不会在服务器端生成的
session没有存值的情况下是不会在服务器端生成的
#3
若服务器没有设置cookie 和Session
客户端的SessionID 每次都是变化的,每次都new一个
一旦设置 设置cookie或Session任意一个,sessionID将固定下来。
客户端的SessionID 每次都是变化的,每次都new一个
一旦设置 设置cookie或Session任意一个,sessionID将固定下来。
#4
你session里有存值吗
session没有存值的情况下是不会在服务器端生成的
看来是这个问题
session不存值的话,虽然有生成的sessionID了,但是不会给响应头添加set-cookie
能不能再请教个问题,除了Session["test"] = 123;这样赋值使用的形式,有什么简单直接的方式让Session向客户端发送set-cookie吗?
还是说只能手动去写set-cookie,然后把sessionID的值给ASP.NET_SessionId?
#5
若服务器没有设置cookie 和Session
客户端的SessionID 每次都是变化的,每次都new一个
一旦设置 设置cookie或Session任意一个,sessionID将固定下来。
你说的设置是指填充值是吗?
刚才试了下,session添加值是可以的,cookie里面添加值不影响。
能不能再请教个问题,除了Session["test"] = 123;这样赋值使用的形式,有什么简单直接的方式让Session向客户端发送set-cookie吗?
还是说只能手动去写set-cookie,然后把sessionID的值给ASP.NET_SessionId?
#6
你session里有存值吗
session没有存值的情况下是不会在服务器端生成的
看来是这个问题
session不存值的话,虽然有生成的sessionID了,但是不会给响应头添加set-cookie
能不能再请教个问题,除了Session["test"] = 123;这样赋值使用的形式,有什么简单直接的方式让Session向客户端发送set-cookie吗?
还是说只能手动去写set-cookie,然后把sessionID的值给ASP.NET_SessionId?
为什么需要生成sessionID?直接说下需求吧
session不存在的话,就算生成sessionid,下次访问也无法找到匹配的session的
#7
你session里有存值吗
session没有存值的情况下是不会在服务器端生成的
看来是这个问题
session不存值的话,虽然有生成的sessionID了,但是不会给响应头添加set-cookie
能不能再请教个问题,除了Session["test"] = 123;这样赋值使用的形式,有什么简单直接的方式让Session向客户端发送set-cookie吗?
还是说只能手动去写set-cookie,然后把sessionID的值给ASP.NET_SessionId?
为什么需要生成sessionID?直接说下需求吧
session不存在的话,就算生成sessionid,下次访问也无法找到匹配的session的
需要一个标识会话的KEY,然后缓存中有些数据存储的时候,键是根据会话KEY拼接的,理所当然地想到了用sessionID。
不过既然如此的话,就存一部分数据到session好了,这样就触发服务器端向客户端发送set-cookie。
#8
你session里有存值吗
session没有存值的情况下是不会在服务器端生成的
看来是这个问题
session不存值的话,虽然有生成的sessionID了,但是不会给响应头添加set-cookie
能不能再请教个问题,除了Session["test"] = 123;这样赋值使用的形式,有什么简单直接的方式让Session向客户端发送set-cookie吗?
还是说只能手动去写set-cookie,然后把sessionID的值给ASP.NET_SessionId?
为什么需要生成sessionID?直接说下需求吧
session不存在的话,就算生成sessionid,下次访问也无法找到匹配的session的
或者在使用SessionID之前,这样写
Session["Activation"] = 1;
Session.RemoveAll();
有点丑,不过能解决问题
Reflector看看MVC下的Session第一次添加值会做什么,看看有没有好一点的办法,不行就这样了。
#9
而且,ASP.NET MVC和Webform下的处理居然是不同的。
webform下不赋值也直接会给客户端发送set-cooke
webform下不赋值也直接会给客户端发送set-cooke
#10
今天也遇到这个奇葩问题,在Global 加上这段代码就OK了。
protected void Session_Start(object sender, EventArgs e)
{
}
protected void Session_End(object sender, EventArgs e)
{
}
protected void Session_Start(object sender, EventArgs e)
{
}
protected void Session_End(object sender, EventArgs e)
{
}