0

ページの下のコードは、GET リクエストまたはブラウザの更新時にセッションを維持しますが、フォームを送信するとセッション データが失われます。

$user=$_POST['user']; $pass=$_POST['pass'];
if ($_POST['user'])
{ if($user==$un and $pass=$pw)
  { $_SESSION['uid']=$Xid;header('Location: '.$uri.'?welcome'); }
  else { $msg="chybny login";  }
}

if(isset($_GET['logout']))   { session_destroy(); header('Location: '.$uri); }
$cnt=$_SESSION['cnt']+1; $_SESSION['cnt']=$cnt;

上記はログイン用のコードで、検証されたときにウェルカム ページにリダイレクトされますが、セッションは失われます。送信せずにページを更新するか繰り返しロードすると、セッション変数 cnt をエコーすることでセッションが保持されます (1、2、3、...)

フォームを送信した後、セッションが失われ、cnt 変数がリセットされますか?

4

5 に答える 5

0

まず、すべてのページで最初に行うことは、セッションを開始することであることを確認してください(すべてのサブサイトで必要なヘッダーファイルで一度呼び出すことをお勧めします)。

これで、session_start();ができます。システムのいたるところに。

次に、コードを強化します。読みやすくします。何かのようなもの

$userName = isset($_POST['userName']) ? $_POST['userName'] : false;
$password = isset($_POST['password']) ? $_POST['password'] : false;
$logout = isset($_POST['logout']) ? $_POST['logout'] : false;

$url = '../index.php';

if(!($logout))
{
    if($userName && $password)
    {
        if($userName == $un && $password == $pw)
        {
            $_SESSION['loggedIn']=true;
            $_SESSION['uid']=$Xid;
            $_SESSION['message']="success";
        }
        else
        {
            $_SESSION['loggedIn']=false;
            $_SESSION['message']="fail, incorrect login information.";
        }
    }
    else
    {
        $_SESSION['loggedIn']=false;
        $_SESSION['message']="fail ; username and password not submitted.";
    }
    header("Location: $url");

}
else
{
    session_start();
    session_destroy();
    session_start();
    header("Location: $url");
}

また、ユーザーがログインしているかどうかに応じてunqiueコンテンツを表示したい場合は、ヘッダーを変更する代わりに、各ページでログインセッションが設定されているかどうかを確認するだけです。

于 2013-02-19T22:27:42.280 に答える
0

私は通常、次のことを直接試してセッションを操作しません。スクリプトの先頭に配置します。

session_start();
$uid = $_SESSION['uid'];
$cnt = $_SESSION['cnt'];

次に、代わりに変数を操作します

于 2013-02-19T22:08:44.503 に答える
0

PHP.ini上記のコメントに基づいて、コードがすべて問題なく、それが問題であると 100% 確信している場合。このリンクを見て、.ini http://php.net/manual/en/session.configuration.phpの設定を確認してください

于 2013-02-19T22:18:55.440 に答える
0

問題はおそらくあなたの「and」ステートメントです。そのはず &&。条件は true になりません。

于 2013-02-19T22:11:35.053 に答える