1

API へのクロス ドメイン アクセス用の GUID にマップされているユーザー セッションのテーブルにエントリを作成しています。表の行は [guid, cookie] のように表示され、ログイン時に入力されます。

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

ここで私が間違っていることに誰かが光を当てることができますか?

4

1 に答える 1

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();
}
于 2013-01-24T21:47:58.157 に答える