2011-12-29 20 views
5

ユーザーがWebサービス経由でバックエンドアプリケーションにログインするページがあります。 Webサービスは、40分後にバックエンドアプリケーションが自動的にセッションを終了するため、Cookieに保存するセッションIDを40分間返します。 、GetCookie()によって返されたクッキーは常に0001-01-01 00:00:00Expires値を持っているいくつかの理由C#Cookie - Expiresプロパティが設定されない

private HttpCookie GetCookie() 
{ 
    HttpCookie cookie = Request.Cookies["Cookie_SessionID"]; 
    if (cookie != null && cookie.Value != null) 
    {    
     return cookie; 
    } 
    return null;   
} 

:私はこれを持っている受信ページに続いて

private void SetCookie() 
{ 
    Response.Cookies.Add(new HttpCookie("Cookie_SessionID")); 
    Response.Cookies["Cookie_SessionID"].Value = ni.NicheSessionID; 
    Response.Cookies["Cookie_SessionID"].Expires = DateTime.Now.AddMinutes(40); 

    //.... after a few more things 
    Response.Redirect(returnUrl); 
} 

私のコードは、クッキーを書き込みますブラウザでクッキーを表示しても、有効期限が正しく設定されています。

が期限切れのクッキーは単にサーバーに送信されていないと述べたthisを読んだ、私が起こって何ができるかを前提とクッキーがが正しくに書かれていることですが、それは実際には不要なので、ブラウザは有効期限を送信していないれます?...

私の問題は、クッキーが「期限切れ」になって再度ログインする必要があることを正確に把握したいということですが、「私はあなたが知っていることを知っています。すでにログインしていますが、もう一度やり直す必要があります。

ありがとう

答えて

10

ブラウザは、Cookieの名前と値以外の何もサーバーに送信しません。 Cookieが設定された後は、他のすべてのプロパティ(expires、domain、path、httponly、...)をリクエストで取得できません。

このようなメッセージを表示するには、ユーザーがログインしたことを検出する他のメカニズムが必要です。1年ほどプレゼンスCookieを設定し、存在するかどうかを確認することができます。

これに対処するには、保護されたリソースにアクセスしようとするとユーザーをログインページにリダイレクトし、「このページを表示するにはログインする必要があります。あなたのセッションが期限切れになっている可能性があります。

(リクエストごとにCookieを再設定する必要があるので、ユーザーがサイトを使い続けてもログアウトしないように注意してください。 )

3

HTTPプロトコルは、サーバーにCookie有効期限を送信しません。

関連する問題