2013-03-31 96 views
2

我在php中创建了一个简单的登录页面,并且它在我的LAMP上工作得很好。但是今天我不小心把我的/ var目录的权限改成了chmod 777/var之类的东西,虽然我把权限改回了chmod 755/var。但是现在,当我尝试再次访问我的登录页面时,我无法登录。在再次通过代码时,我发现我的SESSION变量在传输到不同页面时没有保留它的数据。我在每个页面(页面顶部)使用session_start(),而且我检查了session_id(),它在每个页面中都是一样的。我在Linux环境中使用Apache和Mysql(Ubuntu 12.04)。我的程序代码:php会话变量不在不同页面之间工作

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> 

回声$ _SESSION ['用户名'],在login.php中的if(mysqli_num_rows)语句后,它正确显示值用户名,但在print_r($ _ SESSION)在securepage.php中,它显示一个空数组。 这段代码在昨天工作的很好,我不知道为什么它现在不工作。
我甚至创建了两个简单的测试页面来检查我的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 
+0

你检查你的web服务器(阿帕奇/ nginx的)的error.log中? – smitrp

+0

更新了我的error.log内容。看起来像某种权限问题! – Shivam

回答

0

你提到你的确做了chmod 777然后把755改为/var目录(甚至可能是子目录)。之后你的问题就开始了,所以它看起来像一个权限问题。

/var目录包含包含您的Web文件夹www/,但其他文件夹以及(logtmp等)上看到您的屏幕截图。 你知道你的php配置(php.ini)保存了你的php会话文件吗? 请查看session.save_path一行以确保。

默认为/tmp,但可能您使用的是/var/tmp/var/lib/php5。事情是,/var/tmp文件夹默认为chmod 777,所以你应该回到那个。

祝你好运!

+0

谢谢你的回答。 在更改我的/ var/lib的权限时,它现在工作正常。然而,我登陆到另一个问题,在sudo上显示: sudo:/ var/lib/sudo可由非所有者写入(040775),应该是模式0700 – Shivam

+0

问题是您应用的权限太宽...您应该已经完成​​了'chmod 777 -R/var/lib/php5',而不是整个'/ var/lib'目录... – achedeuzot

+0

将/ var/lib/sudo的权限更改为0755 现在一切正常! – Shivam

0

这仅仅是一个建议,因为我不知道是什么导致的问题。我做了一个类似的权限相关的错误,导致我的所有脚本无法正常工作,没有任何错误记录在/var/log/apache2/error.log。我做了以下解决问题:

(终端)

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

请注意,你必须预先考虑sudo,如果你是不是root用户。

希望这会有所帮助!

+0

感谢您的回复。但它不工作! – Shivam

0

谢谢Smit给你有用的建议。发现我的/var/lib没有组写入权限。解决使用问题:

须藤搭配chmod 775 -R在/ var/lib中

谢谢