1

PHPでセッション変数を使用する前にsession_start()を使用することは必須ではありませんか? 最初に session_start() を宣言せずに次のコードを試してみましたが、うまくいきました。

だから、今私は混乱しています。助けてください !!!!

また、$_POST または $_GET を使用して $uname を home.php に渡しませんでしたが、それでもどのように機能しますか? include 'home.php' を使用すると、login.php と home.php は同じページとして扱われますか?

// code login.php//
<?
require_once 'db_connect.php';

if (isset($_SESSION ['user_id']) && !empty($_SESSION ['user_id']))
{

    $u_name = $_SESSION['user_name'];
    include 'home.php';
}
else
{
//some stmt
}
?>

/*******home.php file ****/

<?php
require_once 'dbconnect.php';
$_SESSION['username'] = $u_name;
//echo $_SESSION['username'];
//blah blah
?>
4

3 に答える 3

2

php.ini で session.autostart が設定されていない場合は、必ず必要になります。しかし、あなたはおそらくそれを知っているでしょう。

db_connect.php で呼び出していませんか?また、エラーは発生しないと確信しています。セッションは空になるだけです。

于 2012-07-07T00:08:41.853 に答える
1

PHP 経由でファイルをインクルードすると、Session はアクティブのままになります (他の変数も設定されます)。このファイルに新しいリクエストとしてアクセスする場合は、session_start() を設定する必要があります。この動作は、コードを 1 つのファイルに入力した場合と同様に、include と require がインクルード ファイルのコードを現在のファイルに移動するように動作するためです。

さらに、dbconnect.php を 2 回要求する必要はありません。

編集:同じページとして使用される両方のファイルについて質問しました-ページは、phpコード全体が完了した後に提供される出力です。ページ自体は、それを生成するために内部で使用されるファイルの数を気にしません。

于 2012-07-07T00:14:01.223 に答える
0

session_start() の使用は、php のすべてのセッションで必須です。値がインクリメントされるケースがすでにあるため、POST または GET を同じにするために変数値を渡す必要はありません。同じセッションでオーバー値が null または空白でない場合、同じ方法でページを開いた場合、条件が間違っています。

(!Isset($_SESSION ['user_id']) &&!​Is_Null($_SESSION['user_id']))

この必要性が空かどうかをチェックするために設定されています! 2 番目のケースでIF(!isset($_SESSION['user_id'])は、セッションが存在するか存在しないかのいずれかであり、値が設定されている場合は null であり、無効でないかどうかを確認します。したがって、正しいビューは次のとおりです。is_null($_SESSION ['user_id'])

重要なことに、ログイン ページには含まれませんが、ページにリダイレクトされます。の場合header

または、単一のページですべてを行うこともできますが、ログイン ページと呼ばれるページに表示することは合法ではありません。デフォルトはインデックスです。つまり、ログインがフォルダ内にある場合は、インデックス ページとフォルダのアドレス内に配置します。

セッションがまだ開くことができる理由は、Web サーバーがコードの消去された部分を認識せず、システム キャッシュからそれをロードする場合があるためです。

于 2014-07-21T04:04:57.140 に答える