php会话变量在不同页面之间不起作用

时间:2013-03-31 08:48:14

标签: lamp php

我在php中使用会话创建了一个简单的登录页面,它在我的LAMP上工作得很好。但是今天我不小心将我的/ var目录的权限更改为chmod 777 / var,尽管我将其权限更改为chmod 755 / var。但是现在当我再次尝试访问我的登录页面时,我无法登录。再次通过代码时,我发现我的SESSION变量在转移到不同页面时没有保留其数据。我在每个页面(页面顶部)都使用session_start(),而且我检查了session_id(),它在每个页面都是相同的。我在linux环境中使用Apache和Mysql(Ubuntu 12.04)。我的计划代码:

index2.php:

<?php 
session_start();

if(isset($_SESSION['username'])) 
{
header('Location: securepage.php');
}
?>

<html>
<head>
    <title>Secure LOGIN</title>
</head> 
<body>
    <h2>User Login </h2>
    <form method="POST" action="login.php">
        <br>UserName : <input type= "text" name="username">
        <br>Password : <input type="password" name="password">
        <br><input type="submit" value="Login">
    </form>

</body>
</html>

login.php:

<?php
session_start();
include('load.php');
$obj = new load();
$conn = $obj-> connect();

if(!conn)
{
exit('Connection cannot be established');

}

mysqli_select_db($conn,'login') or die('Cannot be established');
$query = "SELECT * FROM users WHERE uname='".$_POST['username']."' and pass =  '".md5($_POST['password'])."';";

$login = mysqli_query($conn,$query);


if(mysqli_num_rows($login) == 1)
{
$_SESSION['username'] = $_POST['username'];
 header('Location: securepage.php');
}
else
{
header('Location: index2.php');
}

?>

securepage.php:

<?php

session_start();


if (!isset($_SESSION['username'])) {
header('Location: index2.php');
}

?>
<html>

<head>
<title>Secured Page</title>
</head>

<body>

<p>This is secured page with session: <b><?php echo $_SESSION['username']; ?></b>
<br>You can put your restricted information here.</p>
</body>

</html>

echo $ _SESSION ['username'] 上,在login.php中的if(mysqli_num_rows)语句之后,它正确显示用户名的值,但是在 print_r($ _ SESSION),它显示一个空数组。 这段代码一直很好,直到昨天,我不知道为什么它现在不工作。
我甚至创建了两个简单的测试页来检查我的SESSION变量,但即使这样也行不通。尽管$ _SESSION中的值已设置,但它未转移到第二页。我没有触及任何LAMP的配置设置。

My phpinfo() screenshot
Permissions of var direcroty

请告诉我哪里出错了。

error.log 的内容:

PHP Warning:  session_start(): open(/var/lib/php5/sess_mm4ja22k9n0r4gv512imc07ur0, O_RDWR) failed: Permission denied (13) in /var/www/public/index2.php on line 2, referer: http://localhost/index2.php

PHP Warning:  Unknown: open(/var/lib/php5/sess_mm4ja22k9n0r4gv512imc07ur0, O_RDWR) failed: Permission denied (13) in Unknown on line 0, referer: http://localhost/index2.php

PHP Warning:  Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php5) in Unknown on line 0, referer: http://localhost/index2.php

3 个答案:

答案 0 :(得分:0)

这只是一个建议,因为我不确定导致问题的原因。我发了一个类似的权限相关错误导致我的所有脚本无法正常工作,/var/log/apache2/error.log中没有记录任何错误。我做了以下事情来解决问题:

(在终端)

:$ chmod 775 -R /var/www
:$ chown <user-name>:www-data -R /var/www

请注意,如果您不是sudo用户,则必须添加root

希望这有帮助!

答案 1 :(得分:0)

您提到您已经chmod 777然后返回755/var目录(甚至可能是子目录)。之后你的问题就开始了,所以这似乎是一个权限问题。

/var目录包含包含您的网络文档的www/文件夹,但也包含其他文件夹(logtmp等),如屏幕截图所示。 你知道你的php配置(php.ini)在哪里保存你的php会话文件吗? 请查看session.save_path行以确定。

默认值为/tmp,但您可能正在使用/var/tmp/var/lib/php5。问题是,/var/tmp文件夹默认为chmod 777,因此您可以恢复原状。

祝你好运!

答案 2 :(得分:0)

谢谢你给我一个有用的建议。弄清楚我的 / var / lib 没有写入的组权限。使用以下方法解决了问题:

sudo chmod 775 -R / var / lib

谢谢