7

サーバーの処理を行う従来の ASP ページへの JQuery および AJAX 呼び出しを使用してシステムを構築しています。

このシステムでは、ユーザーがログインする必要があります。セッションを使用してユーザー名を保存しています。

問題は、デフォルトの 20 分後にセッションがタイムアウトし、ユーザーがサインイン ページにリダイレクトされることです。何らかの理由で AJAX 呼び出しがセッションを維持していないと思います。

これが私がやっている方法です:

ユーザーがログインすると、次のように AJAX 呼び出しを投稿します。

$.ajax({ 
    type: "POST", 
    url: "admin/ajax/signin.asp",
    data: { 
        'username': username,
        'userpassword': userpassword
    },
    cache: false,
    success: function(data, textStatus, jqXHR) {  
        if (jqXHR.getResponseHeader('REQUIRES_AUTH') === '1'){
            $('#failed').show();
        }
        else {
            location.href = "admin/"
        }
    }
});   

signin.asp はデータベースに対してユーザーの詳細をチェックします。OK の場合、このページはユーザー名をセッション変数に保存します。

Session("userid") = Request("username")

ユーザーがログインしました。

ユーザーがシステムを使用している間、すべてのページですべての AJAX リクエストの REQUIRES_AUTH ヘッダーがチェックされ、ログアウトのリダイレクトが次のように処理されます。

/* Check user logged in on every ajax request */
$('body').ajaxComplete(function(event,request,settings){
    if (request.getResponseHeader('REQUIRES_AUTH') === '1'){
        location.href="../signin.html"
    };
}); 
/* End */

AJAX ポストを使用して呼び出されるすべての ASP ページは、セッションのチェックを行います。存在しない場合は、次のように REQUIRES_AUTH ヘッダーを設定します。

If (trim(Session("userid")) = "") Then
    'No session so clear variable
    Session.Contents.Remove("userid")
    'Redirect to Login page
    Response.AddHeader "REQUIRES_AUTH", "1"
Else
    Session("userid") = Session("userid")  
End If

Session("userid") = Session("userid") を使用し、サーバー上で何かを行う ASP ページを呼び出しているという事実は、セッションを維持するのに十分であると仮定しましたが、そうではないようです。すべてのアドバイス大変感謝しています。私は根本的に何か間違っていますか?

4

2 に答える 2

0

残念ながら、従来の ASP セッションにはスライド式の有効期限はありません。私は2つの提案を理解することができます:

  1. セッションの代わりに Cookie を使用して、ユーザーを識別します。ユーザー ID のハッシュが適している可能性があります。
  2. Session.Timeout20 分以上の値を延長します。
于 2013-01-31T19:12:59.473 に答える