1

我在用户会话的表中创建了一个条目,该用户会话被映射到用于跨域访问API的guid。表中的行看起来像[guid,cookie],并在登录时填充。MVC4:在会话结束时删除自定义的行

session.guid = Guid.NewGuid(); 
session.cookie = FormsAuthentication.GetAuthCookie(sUser.email, false).Value; 

我遇到的问题是当会话结束时将其从数据库中删除。我到目前为止似乎没有工作。

在Session_End中():

var cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName]; 
string cValue = cookie.Value; 

using (var db = new xEntities()) 
{ 
    Session session = db.Sessions.Where(p => p.cookie == cValue).FirstOrDefault(); 
    db.Sessions.Remove(session); 
    db.SaveChanges(); 
} 

任何人都可以摆脱对我做错了什么在这里一些轻?

回答

0

我设法找到同时笨重的选择:

DateTime now = DateTime.Now; 
Session session = new Session(); 
session.guid = Guid.NewGuid(); 
session.cookie = FormsAuthentication.GetAuthCookie(sUser.email, false).Value; 
session.started = now; 

using (var db = new xEntities()) 
{ 
    db.Sessions.Add(session); 
    db.SaveChanges(); 
} 

using (var db = new xEntities()) 
{ 
    List<Session> sessions = db.Sessions.ToList(); 
    now = now.AddMinutes(-60); 

    foreach(Session s in sessions) 
    { 
     if (s.started < now) 
     { 
     db.Sessions.Remove(s); 
     } 
    } 
    db.SaveChanges(); 
}