2

セッションを使用してphpで簡単なログインページを作成しましたが、LAMPでうまく機能していました。しかし、今日、誤って /var ディレクトリの権限を chmod 777 /var のようなものに変更しましたが、その権限を chmod 755 /var に戻しました。しかし、ログインページに再度アクセスしようとすると、ログインできませんでした。コードをもう一度調べてみると、別のページに転送している間、SESSION 変数がデータを保持していないことがわかりました。すべてのページ (ページの上部) で session_start() を使用しています。さらに、 session_id() を確認しましたが、すべてのページで同じです。Linux環境(Ubuntu 12.04)でApacheとMysqlを使用しています。私のプログラムのコード:

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) ステートメントの後、usernameの値が正しく表示されますが、 securepage.php のprint_r($_SESSION)では、空の配列が表示されます。このコードは昨日までうまく機能していましたが、なぜ今は機能していないのかわかりません。
SESSION 変数を確認するために 2 つの簡単なテスト ページを作成しましたが、それでも機能しません。$_SESSION に値が設定されていますが、2 ページ目に転送されていません。LAMP の構成設定には触れていません。

私の phpinfo() スクリーンショット
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
4

3 に答える 3

0

その後、ディレクトリ(おそらくサブディレクトリ)chmod 777に戻ったと述べました。あなたの問題はその後始まったので、許可の問題のようです。755/var

/varディレクトリには、Webwww/ドキュメントを含むフォルダーが含まれていますが、スクリーンショットに示されているように、他のフォルダー ( logtmpなど) も含まれています。PHP設定(php.ini)がPHPセッションファイルを保存する場所を知っていますか?念のため、 session.save_pathの行を確認してください。

デフォルトは ですが、または/tmpを使用している可能性があります。問題は、フォルダがデフォルトであるため、それに戻す必要があるということです。/var/tmp/var/lib/php5/var/tmpchmod 777

幸運を !

于 2013-03-31T09:47:59.873 に答える
0

有益な提案をしてくれた Smit に感謝します。/var/libにグループへの書き込み権限がないことがわかりました。を使用して問題を解決しました:

sudo chmod 775 -R /var/lib

ありがとうございました

于 2013-03-31T09:48:23.447 に答える