这是我的login.php代码段:
<?php
session_start();
include 'db_connection.php';
if (isset($_POST['login'])) {
$match_flag = false;
$username = $_POST["username"];
$password = $_POST["password"];
//$_SESSION['username'] = $username;
$query_select = "SELECT admin_username, admin_password FROM users_admin";
$query_result = $conn->query($query_select);
if($query_result){
foreach($query_result as $rows){
if(($rows['admin_username'] == $username)&&($rows['admin_password'] == $password)){
$_SESSION['username'] = $username;
echo "<br> Session ID -> ".SID;
$match_flag = true;
break;
}
}
}
if($match_flag){
echo "1";
}else{
echo "0";
}
exit();
}
?>
这是我的dashboard.php代码:
<?php
session_start();
echo "Session is -> ".$_SESSION['username'];
echo "<br> Session ID -> ".SID;
if(!isset($_SESSION['username']))
{
echo '<META HTTP-EQUIV="Refresh" Content="0; URL=http://www.example/login.php">';
exit();
}
?>
运行login.php后会设置会话值并获取会话ID,当我看到会话文件时,我发现内容很好。但是当dashboard.php运行时,我会得到另一个但不同的会话ID,其中包含一个空的会话文件。这意味着在运行dashboard.php时正在创建一个新会话,但这完全出乎意料。我搜索了很多,但没有得到满意的答案。请指导我为什么会在新页面上再次启动会话?
提前谢谢!
答案 0 :(得分:1)
这只是一个有根据的猜测,但是您提供会话名称和会话ID的方式可能存在问题。至关重要的是,您的两个脚本都知道相同的会话ID。
有几种方法可以做到这一点。
如今大多数PHP安装都配置为使用cookie和cookie。一些PHP版本之前的会话参数通过URL参数传输。
PHP处理这些的方式在php.ini中配置。
您可能会在PHP手册中找到有关会话配置的部分:http://php.net/manual/session.configuration.php
请务必查看session.use_cookies
和session.use_trans_sid
指令。出于安全考虑,我建议您将所有内容设置为默认值。您可以通过<?php phpinfo(); ?>
查看当前配置。