10

POSTを使用して自分でセッションIDを渡したいPHPコードを書いています。ユーザーが POST サイクルから抜け出すとセッションが失われるため、Cookie にセッションを保存したくありません。

PHP は、利用可能な Cookie を自動的に設定します。session.use_cookiesで 0 に設定すると、この動作を変更できることがわかりましたphp.ini。残念ながら、私はそのファイルにアクセスできません。また、同じサーバーで実行されている他のスクリプトの動作を壊したくありません。

PHP スクリプト内でセッション Cookie を無効または無効にする方法はありますか?

編集:提案された解決策がうまくいかないため、セッションを無効にする必要があるコード内の位置で $_SESSION = array() を使用しました。

4

6 に答える 6

34

ini_set()を使用します。

ini_set('session.use_cookies', '0');

または php.ini ファイルで:

session.use_cookies = 0
于 2008-10-27T23:35:13.667 に答える
8

独自の .htaccess ファイルを作成してホストのデフォルト設定をオーバーライドすることは可能です。まだ触れていない場合は、ここに素晴らしいチュートリアルがあり ます http://www.askapache.com/htaccess/apache-htaccess.html

または、学ぶのが面倒な場合は、サイト ディレクトリに ".htaccess" ファイル (ファイル名です) を作成し、次のコードを配置します。

SetEnv session.use_cookies='0';
于 2008-10-27T23:38:32.177 に答える
2

その設定を .htaccess に入れて、すべてのスクリプトに適用することもできます。それ以外の場合は、リクエストごとにコードが呼び出されるようにする必要があります。

例えば。

php_value session.use_cookies 0

于 2008-10-27T23:40:14.793 に答える
2

特定の時間にセッションをザップできるようにする必要がある場合は、session_destroy() を使用します。セッションを完全に終了したい場合は、ドキュメントから直接コピー/ペーストしたスニペットを次に示します。

// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();

// Unset all of the session variables.
$_SESSION = array();

// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), '', time()-42000, '/');
}

// Finally, destroy the session.
session_destroy();
于 2008-10-28T19:53:18.777 に答える
2

Cookie を使用してセッションを破棄するための PHP の文書化されたアプローチに問題がありました。

// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

これにより、Cookie が 2 回設定されていることがわかりました。

Set-Cookie: SESSION_NAME=deleted; expires=Sat, 08-Jan-2011 14:09:10 GMT; path=/; secure
Set-Cookie: SESSION_NAME=1_4f09a3871d483; path=/

PHP のコメントに記載されているように、Cookie の値を空 ('') 以外に設定すると、「削除された」値は削除されますが、2 番目の Cookie セットは残ります。

それを取り除くには、上記のコードを追加する必要がありました。

ini_set('session.use_cookies', '0');

セッション処理のソースは見ていませんが、setcookie(...) がセッション モジュールをバイパスしているため、セッションは私がそれを呼び出したことを知りません。そのため、削除された Cookie を設定した後、デフォルトの Cookie を設定しています。

私はMacでテストしていました:Suhosin-Patch(cli)を使用したPHP 5.3.6(ビルド:2011年9月8日19:34:00)

于 2012-01-08T15:17:45.967 に答える
-4

それを行う方法は、自分でセッションを設定することです。

他のすべてのファイルに含まれている中央のインクルードファイル(そのうちの1つはありますか?)では、できるだけ早くいくつかのことを行う必要があります。

if( !array_key_exists('sessionid', $_POST) ) {
    // recreate the sessionid
    $sessionid = md5(rand().' '.microtime()); // Or something
} else {
    $sessionid = $_POST['sessionid'];

session_id($sessionid);
session_start();

ここで、フォームを開始したらすぐに、以下を含める必要があることを覚えておく必要があります。

<input type='hidden' name='sessionid'><?= session_id() ?></input>
于 2008-10-28T01:09:51.947 に答える