0

プロジェクトでは、ログインが最も重要なWebアプリを作成しています。残念ながら、セッションを正しく機能させることができないようです。そのため、サインインはまったく続きません。これが私のテスト/実験/デバッグページに書いた簡単なコードです。

これがテストページの先頭です。

<? 
if(!isset($_SESSION)){
    session_start(); 
}
?>
<!DOCTYPE html>
...

これがセッションデータを使用するコードです。

$_SESSION[0] = $_SESSION[0] + 1;
echo($_SESSION[0]);

訪問するたびに増加するはずですが、ログインシステムのように増加していません。

phpinfo()これが役立つ場合の関数からのセッション設定です。

Session Support enabled
Registered save handlers    files user sqlite
Registered serializer handlers  php php_binary wddx

Directive   Local Value Master Value 
session.auto_start  Off Off
session.bug_compat_42   On  On
session.bug_compat_warn On  On
session.cache_expire    180 180
session.cache_limiter   nocache nocache
session.cookie_domain   no value    no value
session.cookie_httponly Off Off
session.cookie_lifetime 0   0
session.cookie_path /   /
session.cookie_secure   Off Off
session.entropy_file    no value    no value
session.entropy_length  0   0
session.gc_divisor  100 100
session.gc_maxlifetime  1440    1440
session.gc_probability  1   1
session.hash_bits_per_character 4   4
session.hash_function   0   0
session.name    PHPSESSID   PHPSESSID
session.referer_check   no value    no value
session.save_handler    files   files
session.save_path   /tmp    /tmp
session.serialize_handler   php php
session.use_cookies On  On
session.use_only_cookies    On  On
session.use_trans_sid   0   0
4

4 に答える 4

1

セッションをチェックするために!issetは必要ありません。session_start();を呼び出すだけです。セッション変数を扱うページの上部にあります。

ルートレベルのキーは有効な識別子である必要があるため、session [1]は機能しませんが、session['1']は機能します。

セッションドキュメントには、いくつかの興味深い修飾子があります。

コメントには、さらに高度な例もいくつかあり
ます。register_globals設定を制御できない場合:(isset($ _ REQUEST ['_ SESSION']))。

于 2012-11-17T11:44:02.190 に答える
0

PHP session_startドキュメントから取得:

session_start()は、GETまたはPOSTリクエストを介して渡された、またはCookieを介して渡されたセッション識別子に基づいて、セッションを作成するか、現在のセッションを再開します。

したがって、Cookieベースのセッションを使用するにsession_start()は、すべてのスクリプトの先頭で常に呼び出して、現在のセッションを再開する必要があります。チェックしないでください$_SESSION。PHPは新しいセッションを開始しませんが、現在のセッションを再開します。

于 2012-11-17T11:47:50.467 に答える
0

私は自分のセッションをこのように設定しました-(それは安全で私のために働きます)

ログインページ:

$_SESSION['fingerprint'] = md5($_SERVER['HTTP_USER_AGENT'] . PHRASE . $_SERVER['REMOTE_ADDR']);

//または単に$_SESSION['fingerprint'] = $login['id']//IDをセッションとして保存します(安全ではありません)

(設定ページで定義されたフレーズ)

次に、サイトの残りの部分全体にあるヘッダーで:

session_start();
if ($_SESSION['fingerprint'] != md5($_SERVER['HTTP_USER_AGENT'] . PHRASE . $_SERVER['REMOTE_ADDR'])) {       
    session_destroy();
    header('Location: http://website login page/');
    exit();     
}

その後、session['fingerprint']

于 2012-11-17T11:50:20.840 に答える
0

質問を少し詳しく説明してください。複数のページにセッションが存在しないという問題が発生した場合は、各ページでセッションを呼び出さない可能性があります。ログイン後に機能するすべてのページでは、私の知る限り、セッションを個別に呼び出す必要があります。

于 2012-11-17T12:15:47.253 に答える