PHP,同一窗口,不同页面,每个页的SESSION_ID都不同是怎么回事?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP,同一窗口,不同页面,每个页的SESSION_ID都不同是怎么回事?相关的知识,希望对你有一定的参考价值。

login.html login.php welcome.php
--login.php--
<?php

session_start();

$str_UserName = $_POST['UserName'];
$str_Password = $_POST['Password'];

$conn=mysqli_connect('lpdfeom','sd3dsad','12dsfe3','wfe3cdsm');

if(empty($conn))

die("数据库连接失败");

else


$conn->query('set names utf8');

$sqlcmd="select * from Members where UserName='".$str_UserName."'and Password='".$str_Password."'";

$result=$conn->query($sqlcmd);
$row=$result->fetch_row();

if($row)


$_SESSION["UserName"]=$username;
$_SESSION["Password"]='true';
echo "登录成功";

else

$msg="用户名或密码错误";
$_SESSION['msg']=$msg;

echo "用户名或密码错误";



?>
---welcome.php-
<?php

if($_SESSION["Password"]=='true')

echo 'Password:'.$_SESSION["Password"].'<br/>';
echo '欢迎回来!';

else
echo 'Password:'.$_SESSION["Password"].'<br/>';
echo '没有登录<br/>';
echo 'ID:'.session_id().'<br/>';

?>
------------------
在login.html填写正确的账户密码提交给login.php后,login.php读取数据库成功核对并显示登陆成功。之后在地址栏输入welcome.php的地址,得到的页面确实新的SESSION_ID,这是为什么?
------login.php----
<?php

session_start();

$str_UserName = $_POST['UserName'];
$str_Password = $_POST['Password'];

$conn=mysqli_connect('12','23','33','44');

if(empty($conn))

die("数据库连接失败");

else


$conn->query('set names utf8');

$sqlcmd="select * from Members where UserName='".$str_UserName."'and Password='".$str_Password."'";

$result=$conn->query($sqlcmd);
$row=$result->fetch_row();

if($row)

$_SESSION["Online"]='true';
$_SESSION['msg']="登录成功";
echo "<a href='welcome.php'>进入</a>";

else

$_SESSION['msg']="登陆失败";

echo "<a href='welcome.php'>进入</a>";



?>
-------welcome.php------

<?php

session_start();
echo $_SESSION["msg"].'<br/>';

if(isset($_SESSION['Online']))

echo 'Online:'.$_SESSION["Online"].'<br/>';

else
echo 'Online:'.$_SESSION["Online"].'<br/>';

?>

参考技术A 你应该在初始化文件中加载
session_start();
这样每个页面都自动开启session 就不会出现你说的那个问题。
sessionid是自动生成的当然不一样了追问

请问初始化文件指的是哪个?PHPINI文件吗?

追答

简单来说就是你的项目中 每执行一段代码都会先运行初始化文件里的代码 这样说你明白吗

追问

明白了,谢谢。

本回答被提问者采纳
参考技术B welcome.php代码中前面加上session_start();
你在login.php中输出下
$_SESSION["Password"]
值看看
参考技术C 你的welcome.php页面session没有启用。追问

加上
session_start();
也不行,这是后来删除的。
现在的问题就是login.php页面注册的SESSION变量,在welcome.php页面里读不出来,不知道是什么原因。

追答

检查下你的运行时设置(ini_get),
session.use_cookies
session.gc_probability
session.gc_maxlifetime
以及浏览器是否禁用了cookie

追问

浏览器没有禁用COOKIE,phpini设置也没有问题。请看问题补充上的代码是否有问题?

追答

代码除了welcome少一个
session_start();
其他session的逻辑是正确的

参考技术D SessionID生成的规则是有加上时间戳

session和localstorage的区别

参考技术A 共同点:都是保存在浏览器端,且同源的。
区别:
1、数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;
2、作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localStorage 在所有同源窗口中都是共享的;

以上是关于PHP,同一窗口,不同页面,每个页的SESSION_ID都不同是怎么回事?的主要内容,如果未能解决你的问题,请参考以下文章

session和localstorage的区别

FireFox 如何设置成每个标签页独立的SESSION?

PHP使用session控制同一个账户单设备登陆

如何在同一网页上有不同的视频弹出窗口?

PHP中禁用cookie后session的实现

php为啥session能在当前页面中输出值,在其他页面从session中取值的时候是NULL