0

永続的なログインと通常のセッションを許可するログインフォームがあります。簡単に言うと、ユーザーが自分のアカウントにいる場合、パスワード、電子メールなどを変更できます。しかしそのためには、最初にセッションまたは Cookie からユーザー名を取得する必要があります (適切な SQL クエリを実行できるようにするため)。

私はこのコードでそうしようとします:

if(isset($_SESSION['username']))
{
    $username = $_SESSION['username'];
}
else
if(isset($_COOKIE['username']))
{
    $username = $_COOKIE['username'];
}

しかし、$username をエコーし​​ようとすると、「未定義の変数」が表示され続けます。何故ですか?

session_start(); を入れると気づきました。頂点で。もちろん、セッション用の適切なユーザー名を取得しますが、Cookie 用ではありません。どうすれば解決できますか?

(私にとって)奇妙な部分は、別のページでまったく同じコード(その部分)を取得し、ユーザー名が未定義ではないことです。

PS: 不明な点がある場合、またはさらに情報が必要な場合は、お知らせください。

編集

私はこれを試しました:

    function accountValidation()
{
    if(isset($_SESSION['username']))
    {
        $username = $_SESSION['username'];
    }

    else if(isset($_COOKIE['username']))
    {   
        $cookie = $_COOKIE['username'];
        $explode = explode(' - ', $cookie);
        $username = $explode['0'];
    }
         echo $username;
}

accountValidation();

そして、うまくいきました...それを関数に入れて呼び出すと、うまくいきますか?! 違いは何ですか?なぜそれが機能するために関数に入る必要があるのですか???

4

1 に答える 1

1

特定の Cookie を設定すると、次のリロードから利用できるようになります。$_COOKIE は、ページ ヘッドが呼び出されたときに設定されます。Cookie を設定した同じページから Cookie を取得することはできません。私が意味したことを理解していただければ幸いです。そうでない場合は、より良い例を挙げます。

編集:

<?php
    session_start();  
    $_SESSION['test'] = 'test1success';  
    echo $_SESSION['test'];// would display test1success  
    if (!isset($_COOKIE['test2']))  
    {
        setcookie("test2", "test2success", time()+3600);
    }  
    echo $_COOKIE['test2'];  
    // wont display test2success when you load the page for first time
    // reload it & it would display test2success
?>

説明:
最初に理解する必要があるのは、ページが読み込まれたときに Cookie が PC (ブラウザー) に保存されるということです。クライアント (ブラウザ) は、Cookie ヘッダーをサーバーに送信し、ページを実行します。ページの実行中に set_cookie によって設定された値はクライアント pc で設定され、サーバーは設定されたばかりの新しい値を認識しません-ページをリロードして Cookie ヘッダーが送り返されない限り。

于 2012-08-26T16:36:41.677 に答える