在MVC.NET中保持浏览器会话中唯一ID的最佳方法是什么?
默认情况下是否有会话/ cookie ID值?
在我的Global.asax中,我可以创建一个新会话[" ID"]并使用其ID属性。
还有另一种方式吗?
我尝试使用
var session = HttpContext.Current.Session;
UserResearch userResearch = new UserResearch();
userResearch.SessionID = sesstion.SessionID.ToString();
但是我收到了一个错误:
System.NullReferenceException:未将对象引用设置为对象的实例
我需要根据没有登录任何内容的用户提取初始浏览器并点击研究,所以我需要一些方法来引用它们,因此ID。
我可以在sql端创建一个唯一的id并将其存储在一个会话中,看起来应该有更直接的方式。
是否有浏览器会话ID?
答案 0 :(得分:1)
您的问题很可能是由您尝试访问HttpContext的代码中的 where 引起的,这就是为什么您为Session获取NullReference
的原因。但假设你得到了解决方案,这就是我解决问题的方法。
我只会在Cookie中存储GUID
,然后像这样获取/设置:( 未经测试)
public Guid SessionGUID(){
if(HttpContext.Current.Request.Cookies["SessionGUID"])
{
//return the SessionGUID
return HttpContext.Current.Request.Cookies["SessionGUID"].value as Guid;
}
else//new visit
{
//set cookie to a new random Guid
var _guid=Guid.NewGuid();
HttpCookie guidCookie = new HttpCookie("SessionGUID");
guidCookie.Value = _guid;
guidCookie.Expires = DateTime.Now.AddDays(1d);
HttpContext.Current.Response.Cookies.Add(guidCookie);
return _guid;
}
}
答案 1 :(得分:0)
根据https://stackoverflow.com/users/374310/igor:谢谢! global.asax是一个文件,其中的MvcApplication类可以实现多个方法/事件处理程序,其中一些在Session尚不可用时调用。 Session_Start应该适合你。
var session = HttpContext.Current.Session;
UserResearch userResearch = new UserResearch();
userResearch.SessionID = sesstion.SessionID.ToString();
我把它放在Session Start和Voila中!