2

次のコードを使用して、ページ間でログインユーザーIDを取得します

// login method of account model
public ActionResult Login(LoginModel model)
{
    Session["username"]=model.Username;
    //redirect to login controler
}

およびログインコントローラで

public ActionResult LoginLayout()
{
    if(IsAdmin(Session["username"]))
        return View();
    else
        return OtherView();
}

ブラウザを閉じてから再度開くまではすべて問題ありOtherView()ません。ログインユーザーとして認証されている場合でも、常にリダイレクトされます。

アップデート

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Login(LoginModel model, string returnUrl)
    {
        if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
        {                
            Session["username"] = model.UserName;
            return RedirectToLocal(returnUrl);
        }

        // If we got this far, something failed, redisplay form
        ModelState.AddModelError("", "The user name or password provided is incorrect.");
        return View(model);
    }
4

3 に答える 3

2

セッション状態をクリアするには、常に準備が必要です。たとえば、web.configファイルが変更されると、ワーカープロセスがリサイクルされ、すべてのインプロセスセッション状態が失われます。アウトプロセスセッション状態を使用することでこれを軽減できますが、それでも、ベストプラクティスとして、いつでもセッションを失う準備をする必要があります。

于 2013-02-22T02:07:47.730 に答える
1

Cookieが保持されているため、ログインしているかどうかを確認する必要があります。セッションをDBまたは状態に保存していない限り、ブラウザを閉じた後はセッションが存在しないため、セッションとは関係ありません。

于 2013-02-22T01:57:52.447 に答える
0

以前の返信の状態として、ブラウザを閉じた後も有効であるためにsessionstateに返信することはできません。次の2つの記事が役立つはずです

ASP.NETセッション状態の概要

ASP.NET状態管理の推奨事項

ティム

于 2013-02-23T13:12:31.677 に答える