Eri*_*rty 5 php session cross-domain
我有多个站点的 CentOS LAMP。我使用 PHP 会话变量登录到网站。我的问题是,如果您登录一个站点,您可以在同一台服务器上打开另一个站点,然后您就会登录。这些站点是完全独立的,因此我希望它们必须分别登录。每个站点都有不同的用户数据库。
这是我在登录时填充的会话变量。
$_SESSION["username"] = "$username";
$_SESSION["user_id"] = "$user_id";
$_SESSION["act_type"] = "$act_type";
Run Code Online (Sandbox Code Playgroud)
我创建了一个小示例,以便您可以重新创建问题
有 2 个独立的站点:/var/www/html/site1 /var/www/html/site2
每个站点有 2 个页面 index.php、secure.php 如果我登录一个页面,我可以打开另一个站点上的 secure.php。
/var/www/html/site1/index.php
<?php
session_start();
$user = 'jane';
$pass = '654321';
if ( $user == $_POST[user] AND $pass == $_POST[pass] ) {
$_SESSION[user] = $user;
header("location: secure.php");
}
else {
echo "Bad Login";
}
?>
<form name="form1" method="post" action="index.php">
Username: <input name="user" type="text">
<br />
Password: <input name="pass" type="password">
<br /><br />
<input type="submit" name="Submit" value="Login">
</form>
Run Code Online (Sandbox Code Playgroud)
/var/www/html/site1/secure.php
<?php
session_start();
if ( !isset($_SESSION[user]) ) {
header("location: index.php");
}
?>
Secure Page
Run Code Online (Sandbox Code Playgroud)
/var/www/html/site2/index.php
<?php
session_start();
$user = 'joe';
$pass = '123456';
if ( $user == $_POST[user] AND $pass == $_POST[pass] ) {
$_SESSION[user] = $user;
header("location: secure.php");
}
else {
echo "Bad Login";
}
?>
<form name="form1" method="post" action="index.php">
Username: <input name="user" type="text">
<br />
Password: <input name="pass" type="password">
<br /><br />
<input type="submit" name="Submit" value="Login">
</form>
Run Code Online (Sandbox Code Playgroud)
/var/www/html/site2/secure.php
<?php
session_start();
if ( !isset($_SESSION[user]) ) {
header("location: index.php");
}
?>
Secure Page
Run Code Online (Sandbox Code Playgroud)
我猜您的会话 cookie 设置之间存在冲突。您应该为每个站点使用单独的 php.ini 文件(如果可能的话),或者在每个站点的入口点使用特定的设置。看看http://ar.php.net/manual/en/function.session-set-cookie-params.php