1

[phpセッションをサブドメインに引き継ぐことを許可する]によると、異なるサブドメイン間でPHPセッションを許可する方法は3つあります。

  • php.ini:session.cookie_domain = ".example.com"
  • .htaccess:php_value session.cookie_domain .example.com
  • phpスクリプト:ini_set('session.cookie_domain', '.example.com' );

(私のウェブホストは.htaccessを介したPHPの変更を許可していないので、他の2つの方法を試しました。)

ただし、session_regenerate_id(true);私のlogin.phpはsession.cookie_domain = ".example.com"、ヘッダーリダイレクト後、PHPセッション変数を空にするという点で競合します。

login.php

if (!isset($_SESSION)) { session_start(); }

// authentication codes...

session_regenerate_id(true);
$_SESSION['username'] = $username;
header('Location: redirect.php');
exit;

redirect.php

if (!isset($_SESSION)) { session_start(); }
var_dump($_SESSION); // returns array(0) { } if session.cookie_domain is set

trueinを使用すると古いセッションが削除されることは理解してsession_regenerate_id()いますが、が設定されていない場合はセッション変数が空になりませんsession.cookie_domain。なんでそうなの?

また、セッションIDを再生成しないと、上記の3つのソリューションは機能しませんが、再生成すると、セッション変数が空になります。これを解決する方法はありますか?

4

1 に答える 1

1
<?php
session_start();
session_regenerate_id();
setcookie('session_id', session_id(), 0, '/', '.yourdomain.com');
if( !empty($_SESSION["user_logged_in"]) ){
header("Location: home.php");
} else {
header("Location: index.php");
}

明らかにsetcookie安全性が低くなりますが、3つすべてがうまくいかない場合は、元のドメインの追加のセッションを使用するか、 setcookie オプションと一緒に追加のセキュリティが必要な場合はデータベースに保存することもできます

于 2013-01-26T16:51:07.623 に答える