PHP session 在页面之间丢失数据

标签 php session

我正在尝试为我的网站设置一个登录系统,要求某人登录才能发帖。我已经用 session 设置了它,它在我的本地主机上运行良好,但在服务器上运行良好。我在某些页面上设置了print_r(session) 来查看数据丢失的位置。在页面 checklogin.php(有人登录时运行的页面)上,它工作正常。这是那里的一些代码:

<?php
session_name('login_session');
session_start();

mysql_connect("localhost","root","root") or die(mysql_error());
mysql_select_db("date_ideas") or die(mysql_error());

$uname=$_POST['uname'];
$uname=mysql_real_escape_string($uname);
$pass=$_POST['pass'];
$pass=mysql_real_escape_string($pass);
$pass=md5($pass);

$query="SELECT * FROM users WHERE uname='$uname' AND pass='$pass'";

$result=mysql_query($query) or die(mysql_error());

$numrows=mysql_num_rows($result);

echo $numrows;

if ($numrows==1)
{
$_SESSION['login']="1";
$_SESSION['uname']=$uname;
echo "<script type='text/javascript'>alert('match');</script>";
print_r($_SESSION);
}
else
{
$_SESSION['login']="";
echo "<script type='text/javascript'>alert('Invalid Login');</script>";
echo "<script type='text/javascript'>window.location = 'login.php?uname=$uname'</script>";
}
?>

当我提交带有良好登录信息的表单时,会弹出警报并返回打印结果:

Array ( [login] => 1 [uname] => FrizbeeFanatic14 )

所以此时它正在工作。但是,当我转到主页时,打印内容变为:

Array ( )

所以它丢失了 session 信息。这是主页的代码:

<?php
session_name('login_session');
session_start();
?>
<html>
<head>
<title>Great Date Ideas</title>
<link rel="stylesheet" type="text/css" href="mainstyle.css" />
<script type="text/javascript" src="validate.js"></script>
<script type="text/javascript" src="cookiecheck.js"></script>
</head>
<body onload="checkCookie()">
<script type="text/javascript">
if (detect=false)
{
document.write("You must enable cookies to view this page.");
window.stop();
document.execCommand('Stop');
}
</script>
<div id="home"><?php require("header.php");?></div>
<?php
print_r($_SESSION);
mysql_connect("localhost","root","root") or die(mysql_error());
mysql_select_db("date_ideas") or die(mysql_error());

$result=mysql_query("SELECT * FROM ideas ORDER BY post_date DESC") or die(mysql_error());

它继续,但接下来的工作正常。

所以所有这些代码在我的本地主机上工作得很好,但在服务器上我得到了这个错误。

最佳答案

我唯一一次遇到类似的问题,是我在转到另一个页面时不小心更改了域(从 www.mydomain.commydomain.com 反之亦然)。

您可以使用 session_set_cookie_params() 让您的 session 在不同的子域之间持续存在:

session_name('login_session');
session_set_cookie_params(0, '/', '.mydomain.com');
session_start();

编辑: 也许这可以帮助您:一篇非常有趣的文章:PHP Session Debugging

关于PHP session 在页面之间丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5438335/

相关文章:

php - Laravel MySQL 使用 eloquent 应用产品过滤器(正确的查询是什么?)

php - 在 Zend Framework 中获取应用程序环境常量

php - 如何在 Linux PHP 中使用 require/include

php - session 数据仅在 Chrome 中丢失

php - 如何让 PHP while 语句终止?

php - 使用 PHP PDO 执行多个 SQL 查询的最佳实践

c# - CookieContainer混淆

php - 在 session 中存储 CSRF key ?

spring - 是否可以跨多个 Controller 访问 Spring MVC 带注释的 session 变量?

codeigniter - 如何修复 "redis session expire automatically"