4

ログインに成功したら、セッション変数を保存しています。

ユーザーがアプリ内の別のページに移動すると、明示的にセッションを破棄していなくても、セッションが失われます。これを修正するにはどうすればよいですか?

これは、セッションが消えたように見えるページです。

<?php
include 'core/init.php';
include 'core/sendmessage.php';
$user_info = $_SESSION['user_id'];
$getUser = mysql_query("SELECT * FROM users WHERE user_id = ".$uid);

$user_info = array();

while($currentRow = mysql_fetch_array($getUser)){
    $user_info['firstname'] = $currentRow['first_name'];
    $user_info['lastname'] = $currentRow['last_name'];
    $user_info['username'] = $currentRow['username'];
}
?>

その中core/init.phpにセッション開始メソッドがあります。

<?php
session_start();
require 'database/connect.php';
require 'functions/users.php';
require 'functions/general.php';

if (logged_in() === true) { 
$user_data = user_data($_SESSION['user_id'],'first_name','last_name','username');
}

$errors = array();
?>
4

2 に答える 2

2

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

session_start()各ページの先頭 (<?phpタグの後)に追加します。

あなたの場合:

<?php
if(!isset($_SESSION)) session_start(); //--> ADD this line

include 'core/init.php';
include 'core/sendmessage.php';
$user_info = $_SESSION['user_id'];

...
于 2012-10-25T23:47:46.563 に答える
0

セッションに使用している値を別の値に使用して (古い値が置き換えられるため)、セッションを非表示にすることは良い習慣ではないと思うので、これらすべてに別の名前を使用してみてください。次にそのページにアクセスしたとき。セッションは一度だけ作成されます。

<?php
include 'core/init.php';
include 'core/sendmessage.php';
$user_info = $_SESSION['user_id'];
$getUser = mysql_query("SELECT * FROM users WHERE user_id = ".$uid);

$userinfo = array(); //I changed $user_info to $userinfo so it doesn't get mixed with the session.

while($currentRow = mysql_fetch_array($getUser)){
    //I removed the underscore
    $userinfo['firstname'] = $currentRow['first_name'];
    $userinfo['lastname'] = $currentRow['last_name'];
    $userinfo['username'] = $currentRow['username'];
}
?>

私はそれをテストしていませんが、今では問題ないはずです。配列を に変更した$userinfoので、何かと混合することなく、常にセッションを使用できます。

于 2012-10-25T21:49:21.040 に答える