我非常沮丧地来找你。我花了几天时间查看我的代码和整个StackOverflow问题,寻找以下问题:
我的项目的功能是使用三页登录。
第一页 1.php
包含要填写的输入字段:
<?php
session_start();
session_destroy();
require_once "init.php";
require "header.php";
?>
<form method="POST" action="2.php" enctype="multipart/form-data">
<table>
<tr><td>Username</td></tr>
<tr><td><input type="text" id="user" name="user" value=""/></td></tr>
<tr><td>Password</td></tr>
<tr><td><input type="password" id="pass" name="pass" value=""/></td></tr>
<tr><td><input type="submit" value="Get in"/></td></tr>
</table>
</form>
第二页 2.php
处理信息,检查用户和密码是否正确,并初始化$_SESSION['user']
;
<?php
session_start();
session_save_path('/server/path/system/sphp');
//had to change dir due to server restrictions
$username= $_POST['user'];
$user= "cpe12";
$userpass= $_POST['pass'];
$pass= "p2010";
if($username==$user&&$userpass==$pass){
$_SESSION['user']= $username;
echo "<head><meta http-equiv='refresh' content='2; url=3.php'>Loging </head>";
echo $_SESSION['user'];
exit();
}
elseif ($username!=$user||$userpass!=$pass){
session_destroy();
echo "<head><meta http-equiv='refresh' content='2; url=1.php'>Wrong log in</head>";
exit();
}
?>
我使用3.php
功能保护 第三页 isset
内容。
<?php
session_start();
session_save_path('/server/path/system/sphp');
//I know I could use an include_once instead of these two lines, right?
error_reporting(E_ALL);
ini_set('display_errors', 1);
if (isset($_SESSION['user'])){
$title= "Copies";
require "header.php";
require "content.php";
}
else{
session_destroy();
echo "<head><meta http-equiv='refresh' content='4; url=index.php'>Blocked content.</head>";
die();
}
?>
每当我尝试登录时,它都会在2.php
中验证确定,但是当它到达3.php
时,它无法登录。所有页面都将session_start和session.save_path写为前两行,没有空格。
我已将/tmp
的默认文件夹session.save_path
更改为server/path
,因为/tmp
没有写入权限。
我可以从2.php
检索一些信息,看起来$_SESSION['user']
可以正常显示,但3.php
从不读取它。问题是我在这个会话下还有另外6个页面可供访问,所以我需要一个全局解决方案。
哦,这很令人困惑:我还创建了一个文件,以便使用以下代码检查名为check.php
的会话信息(仅供参考):
<?php
session_start();
session_save_path('/server/path/system/sphp');
echo session_save_path().'<br/>';
echo $_SESSION['user'].'<br/>';
echo session_name();
if (!is_writable(session_save_path())) {
echo 'Session path "'.session_save_path().'" is not writable for PHP!';
}
?>
现在,如果我首先清除浏览器历史记录和数据,然后在网址中输入www.myweb.com/check.php
,我会看到缺少的信息,因为$_SESSION['user']
等尚未创建。如果之后我尝试登录,无论如何都会惊奇地开始像魅力一样登录。首先,我必须在我的浏览器上访问check.php
才能登录。但是如果我再次清除浏览器历史记录和数据,它就不会让我再登录。
3.php上的error_reporting指出:
Notice: Undefined index: user in "/server/path/system/3.php in line 34
这可能与我的服务器有关吗?关于save_handlers
的事情?
这是我的第一次登录,我经历了地狱。我认为这将是一个很长的路要走。
我没有更多选择或知识可供申请。你是我最后的选择。
谢谢你们!
答案 0 :(得分:2)
session_save_path()。
参考: http://php.net/manual/en/function.session-save-path.php
所以
session_save_path('/server/path/system/sphp');
session_start();
答案 1 :(得分:0)
这在我以前从未发生过。我从2.php复制了代码并将其粘贴到另一个文件中,该文件名为try.php(完全相同的代码)。我重定向1.php以检入try.php然后重定向到3.php。有效。 现在,通过将完全相同的代码复制到另一个文件(我逐字逐行检查),我得不到可以解决的问题,所以我很困惑。 但是,现在就像魅力一样。