1

過去 2 日間からこの問題に取り組んでいましたが、まだ解決できません。

セッションが登録されたルートディレクトリに2つのスクリプトがあり、ページに再度アクセスしても永続的なままですが、サブディレクトリスクリプトからページにアクセスしようとすると、セッションが登録されていないことが示唆されます。

以下の詳細説明:

問題は、次のルート ディレクトリ スクリプトから start_session() を実行すると、http ://www.kstreethome.com/test.php が正常に動作することです。

/test.php のコード

<?php

error_reporting(E_ALL);

echo "This is session save path : " . session_save_path() . "</br>";
//echo phpinfo();
    if(!isset($_SESSION['User']))
    {
        echo "Session not set </br>";
                    session_start();
                    $_SESSION['User'] = "Hiren";
                    $_SESSION['AccessType'] = "U";
                    $_SESSION['UserType'] = "W";
                    $_SESSION['UserID'] = "123";
                    $_SESSION['DataUser'] = "Test";
                    $_SESSION['Password'] = "Test";

        echo session_id();

        echo $_SESSION['User'];
        echo $_SESSION['AccessType'];
        echo $_SESSION['UserType'];
        echo $_SESSION['UserID'];
        echo $_SESSION['DataUser'];
        echo $_SESSION['Password'];     
    }
    else
    {
    echo "Session set </br>";

            echo $_SESSION['User'];
        echo $_SESSION['AccessType'];
        echo $_SESSION['UserType'];
        echo $_SESSION['UserID'];
        echo $_SESSION['DataUser'];
        echo $_SESSION['Password']; 



    }


?>

しかし

サブディレクトリAjaxスクリプトから start_session() を実行すると: http://www.kstreethome.com/Ajax/test.php動作しませんが、このスクリプトではセッションを保存し、同じ実行でアクセスできますが、リロードすると/ Ajax/test.php セッションが破棄され、最初からやり直す必要があります。

/Ajax/test.php のコード

<?php

error_reporting(E_ALL);

echo "This is session save path : " . session_save_path() . "</br>";
//echo phpinfo();
    if(!isset($_SESSION['User']))
    {
        echo "Session not set </br>";
                    session_start();
                    $_SESSION['User'] = "Hiren";
                    $_SESSION['AccessType'] = "U";
                    $_SESSION['UserType'] = "W";
                    $_SESSION['UserID'] = "123";
                    $_SESSION['DataUser'] = "Test";
                    $_SESSION['Password'] = "Test";

        echo session_id();

        echo $_SESSION['User'];
        echo $_SESSION['AccessType'];
        echo $_SESSION['UserType'];
        echo $_SESSION['UserID'];
        echo $_SESSION['DataUser'];
        echo $_SESSION['Password'];     
    }
    else
    {
    echo "Session set </br>";

            echo $_SESSION['User'];
        echo $_SESSION['AccessType'];
        echo $_SESSION['UserType'];
        echo $_SESSION['UserID'];
        echo $_SESSION['DataUser'];
        echo $_SESSION['Password']; 



    }


?>

コードは両方のファイルで同じであり、テスト目的です

別の奇妙なことは、ルート スクリプト /test.php ではセッション パス '' と表示されることです。これは、php.ini のデフォルトを変更していないため、デフォルトの null ですが、スクリプト /Ajax/test.php では、セッション保存パスは / と表示されます。 tmp 変ですよね?

言うまでもなく、私のローカル サーバーでは正常に動作しますが、ホスティング サーバーでは動作しないため、この問題について説明してください。

4

6 に答える 6

3

session_start()各ページの一番上に置く

<?php
 session_start();
 error_reporting(E_ALL);
于 2013-04-06T05:05:17.893 に答える
2

使用する前に、セッションを開始する必要があります

 <?php 
 session_start();
 // your code
 ?>
于 2013-04-06T05:08:41.993 に答える
1

<?php session_start()セッション値が取得または設定される前の最初の行のユーザー。

于 2013-04-06T05:16:51.973 に答える
1

$_SESSION にアクセスする前に、session_start() を呼び出す必要があります。各スクリプトの先頭に配置して、問題が解決するかどうかを確認します。

于 2013-04-06T05:07:17.453 に答える
1

常にコードを開始するsession_start()

<?php
 session_start();
 error_reporting(E_ALL);
于 2013-04-06T05:09:50.250 に答える
0

session_start()$_SESSION を使用する前に呼び出す必要がありますが、煩雑にならないように、これらすべてを処理するラッパー クラスを作成することを強くお勧めします。

$session = new Session();
$session->set('key', 'val');
于 2013-04-06T05:09:28.197 に答える