我在我的PHP代码中设置我的会话:$_SESSION['user_id'] = $login;
这似乎工作正常,同时上传到我的服务器并进行不同的页面,但是当我在我的本地机器上测试网站时,会话似乎离开脚本后,立即取消设置。
我正在使用XAMPP和完全相同的代码在本地计算机上进行测试。
我不确定为什么会出现这个问题,并且非常感谢任何有用的答案。
$_SESSION['user_id'] = $login;
echo '<META HTTP-EQUIV="refresh" content="0;URL=../home.php">';
以下是我登录的整个功能(它是该课程的一部分):
public function loggingIn(){
session_start();
$db = new Database('localhost','root','','userdata');
$userFunctions = new Users($db);
$username = $_POST['usernameInput'];
$password = $_POST['passwordInput'];
if(empty($username) || empty($password)){
$this->errors['u&p'] = 'Please Enter Your Username AND Password';
$this->printE();
} elseif($userFunctions->user_exists($username)===false){
$this->errors['nm'] = 'That Username/Password Combination Is Not Valid';
$this->printE();
} else {
$login = $userFunctions->login($username, $password);
if($login === false){
$this->errors['nm'] = 'That Username/Password Combination Is Not Valid';
echo 'Login Failed!';
} else {
if(!$userFunctions->economyTableExistsForUser($login)){
$userFunctions->createEconomyTableForUser($login);
}
if(!$userFunctions->schoolTableExistsForUser($login)) {
$userFunctions->createSchoolTableForUser($login);
}
$_SESSION['user_id'] = $login;
echo $_SESSION['user_id']; // working fine
header('Location: ../home.php');
}
}
}
答案 0 :(得分:8)
我们猜测你的家用机器没有:
session.autostart = On
在你的php.ini,而你的另一台机器显然是。
确保已在PHP代码中设置:
session_start();
如果你不这样做,那么你的会话就不会开始,除非我的第一个推测是真的。
此外,您必须在本地主机上检查 PHP 版本以及 php.ini 中的设置。确保存储会话文件的目录是可写的,并且会话文件确实存在。
您最好使用PHP解决方案进行重定向:
header("Location: /");
exit();
PHP具有修改HTTP标头的功能。其中一些:
换行符和空格可能是一个问题,但也有不可见的字符序列可能导致Warning: Cannot modify header information
,如UTF-8 BOM (Byte-Order-Mark)。
尝试重新保存您的文件,确保其保存为UTF-8 (no BOM)
。
要正确调试代码,请确保PHP显示所有警告和通知。在会话开始之前运行它:
ini_set('display_errors', -1);
您还必须检查session.gc_maxlifetime
设置:
<强>的session.gc_maxlifetime 强>
session.gc_maxlifetime 指定数据被视为“垃圾”并清理的秒数。会话开始时会发生垃圾收集。
要在Sublime Text中查看空格,请编辑设置:
// Set to "none" to turn off drawing white space, "selection" to draw only the
// white space within the selection, and "all" to draw all white space
"draw_white_space": "selection",
您可以在偏好设置 - >设置默认设置中进行设置。如果您编辑用户设置首选项 - &gt;设置 - 用户并按以下方式添加该行:
{
"font_size": 10,
"draw_white_space": "all"
}
还要确保它显示所有其他特殊字符以正确调试代码!
最后尝试在重定向之前添加session_write_close();
。
在session_start();
,session.save_path = "/home/username/tmp";
指令之前设置PHP文件。
在 public_html 之外创建tmp
目录。确保tmp
dir具有 chmod 770 并使用相同的用户/组权限创建。在您的主目录中运行ls -lsa
以检查新目录是否与其他目录具有相同的用户/组,例如 public_html 。如果没有,请确保通过运行tmp
在chown username:groupname /home/username/tmp
上以root用户身份更改权限。
答案 1 :(得分:4)
快速更新。我发现这个响应非常有用,但请注意,在我安装的XAMPP中,session.autostart = On的php.ini条目略有不同。我找到了以下内容:
在请求启动时初始化会话。 ; http://php.net/session.auto-start session.auto_start = 0
我将其更改为:
在请求启动时初始化会话。 ; http://php.net/session.auto-start session.auto_start = 1
答案 2 :(得分:2)
确保在php.ini
(xamp\php\php.ini
)中启用会话Cookie。
session.use_cookies=1
答案 3 :(得分:1)
在你的php.ini检查中:
variables_order
包含字母S
session.save_path
是否存在且可由运行PHP的用户编写。答案 4 :(得分:1)
如果您使用嵌入.htm / .html文档中的PHP,则需要确保Apache可以正确处理它们。这是通过编辑httpd.conf并添加行
来完成的AddType application/x-httpd-php .html .htm
到<IfModule mime_module>
答案 5 :(得分:1)
我正在解决这个问题,但要解决......
在/opt/lampp/etc/php.ini
尝试更改此行:
session.save_path = "/var/lib/php/session"
为此:
session.save_path = "/opt/lampp/var/session"
注意:您可能需要在/opt/lampp/var
答案 6 :(得分:0)
Session Issue Fixed in Xampp 7.1.6 with following Changes in php.ini
Line #1403 set:
session.auto_start = 1
答案 7 :(得分:0)
在php.ini中启用会话cookie(C:\ xamp \ php \ php.ini)。
CHANGE
session.use_cookies=0
TO
session.use_cookies=1
并记得重启xampp
答案 8 :(得分:0)
我在使用Xampp的实时站点中遇到类似的问题。
在我的案例中,技巧是禁用以下两行。
="Photograph indicates the entrance elevation of "&Frontsheet!D27&"."
因此,我建议您检查关于鸡冠的一些修改。
答案 9 :(得分:0)
php.ini
"1"
更改session.auto_start "Stop"
Apache(如果正在运行)Save"
php.ini
"Start"
Apache 答案 10 :(得分:0)
请检查您在 php ini 中的“session.cookie_path”。默认情况下它是“session.cookie_path=/”