2012-03-20 5 views
0

私はカスタムユーザークラスを呼び出すログインスクリプトを持っており、ユーザーはログインしてセッションが設定されます。 redictのvar dumpをlogin.phpページに実行すると、ユーザーが正常にログインし、フレンドリーなウェルカムメッセージが表示されます。PHPセッションログインしても別のページには存在しません

セッションを設定するためのコードは次のとおりです。login.phpページの罰金働いている

private function setIsLoggedIn($credentials) { 
    if (!isset($_SESSION)) { 
     session_start(); 
    } 
    $_SESSION['verified'] = $credentials; 
    session_write_close(); 
} 

は、関数の引数は次のとおりです。

// assign user info from db to the session 
     $this->setIsLoggedIn(array('UserId' => $user->userid, 
      'UserName' => $user->username, 
      'RoleId' => $user->roleid)); 

が、これはlogin.phpでありますフォームのポストバック

// if the form was submitted 
if (isset($_POST['submit'])) { 

// Set local variables from $_POST array elements (userlogin and userpassword) or empty strings 
    $userLogin = (isset($_POST['userlogin'])) ? trim($_POST['userlogin']) : ''; 
    $userPassword = (isset($_POST['userpassword'])) ? trim($_POST['userpassword']) : ''; 

    //assign values to array and get user object 
    $authArray = array('UserName' => $userLogin, 'Password' => $userPassword); 
    $user = new Users($authArray); 

    if ($user->getUserId() > 0) { //If credentials check out 

     // redirect the user to SESSION value set from common class 
     if (isset($_SESSION['prev_page'])) 
     { 
      header('location:' . $_SESSION['prev_page']); 
      exit; 
     } 
     else 
     { 
      // Otherwise, assign error message to $msg 
      $msg = '<p><strong>Thank your for logging in.<br />You may now visit tools that are in development.</strong></p>'; 
     } 
    } 
    else 
    { 
     // Otherwise, assign error message to $msg 
     $msg = '<p><strong>Sorry, that username and password are not recognized.<br />Please try again.</strong></p>'; 
    } 
} 

私は別のページに行き、$ var_dump($ _ SESSION);を実行します。ページに私はこれを設定していますので、私はいつも、何か他のものを得る:

$_SESSION['prev_page'] = "http://".$_SERVER[SERVER_NAME]."/id/AphID/"; 

このファイルの最初の行は、次のとおりです。

<?php 
session_start(); 

var_dump($_SESSION); 

ここに私のPHPセッションの設定です:

Session Support enabled 
Registered save handlers files user 
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 /dev/urandom /dev/urandom 
session.entropy_length 16 16 
session.gc_divisor 1000 1000 
session.gc_maxlifetime 1440 1440 
session.gc_probability 1 1 
session.hash_bits_per_character 5 5 
session.hash_function 0 0 
session.name PHPSESSID PHPSESSID 
session.referer_check no value no value 
session.save_handler user files 
session.save_path /tmp /tmp 
session.serialize_handler php php 
session.use_cookies On On 
session.use_only_cookies Off Off 
session.use_trans_sid 1 1 

したがって、基本的に私のセッションは本当にログインページにのみ存在し、他にはどこにもなく、Session_start()を呼び出すと、私はいつも別のセッションをします。何か案は?

+0

を呼び出すことができ、セッションを復元するために

? session_write_close呼び出しの後で設定されても、効果はありません。 –

答えて

0

session_write_close()は、データを保存した後にセッションを終了します。 session_start()を次に呼び出すと、新しいセッションが作成されます。

セッションを閉じた後に復元する場合は、セッションを閉じる前にセッションIDをどこかに保存する必要があります。 $sid = session_id()データベースまたはクッキーに保存できます。そして、あなたは$ _SESSION [ 'PREV_PAGE']に設定session_id($sid); session_start();

+0

このセッションを再開するにはどうすればよいですか? –

+0

私はこの質問への答えを含めるために私の答えを更新しました。 – Rob

関連する問題