大家好,
我对MVC如何将HTTP请求映射到会话状态感到困惑。
我的HTTP请求如下所示:
GET / HTTP/1.1
Host: test.net
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.32 Safari/532.0
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
服务器如何知道要映射到哪个用户会话?没有任何标志可以标记我是谁。我猜的唯一方法是它使用请求的源IP吗?
我问的原因是我来自同一公司网络的人(共享相同的公共IP)访问了MVC网站,就像我们共享同一个会话一样。
如果确实使用IP,那么有没有办法将其更改为使用SessionID cookie。我在其他一些帖子中乱搞了web.config,但我没有运气。
非常感谢您的帮助。
谢谢, 克里斯
所以,正如大家猜测的那样,事实证明我做了一些非常错误的事情。我创建了一个类来抽象抓取session var的过程。该类具有从会话状态中获取的静态属性:
public class SessionValue
{
private static HttpSessionState Session = HttpContext.Current.Session;
private const string stepId = "currentStep";
private const string username = "username";
public static int StepId
{
get
{
if (Session[stepId] == null)
{
Session[stepId] = 1;
}
return (int)Session[stepId];
}
set
{
Session[stepId] = value;
}
}
public static string Username
{
get
{
if (Session[username] == null)
{
Username = "";
}
return (string)Session[username];
}
set
{
Session[username] = value;
}
}
}
出于某种原因,我假设静态变量声明将在每个Web请求中重新创建,这显然是一个非常醉酒的误解,因为这只会在应用程序首次加载时设置一次。我仍然不知道它实际上是什么绑定,因为它似乎正在维持某种会话。
尽管如此,将属性更改为实际直接使用HttpContext.Current.Session [string]解决了这个问题。谢谢大家的帮助。
答案 0 :(得分:1)
会话ID存储在您的浏览器发送到服务器的cookie中以及每个请求。
无论如何,这是默认设置。我想你应该能够在标题中看到cookie。你确定你发布的是完整的标题吗?
答案 1 :(得分:1)
您确定会话状态未设置为无Cookie吗? (然后它将从网址获取会话ID)
<sessionState cookieless="true" />
http://yourserver/something/session ID here/something