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(); 
}