在浏览器上保留唯一ID的最佳方法是什么?

时间:2014-06-19 15:20:00

标签: c# asp.net-mvc sessionid

在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?

2 个答案:

答案 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中!