PHP会话不工作
这一次,我需要你在一些与php相关的方面的帮助。我的用户脚本没有按预期工作,它应该在3周内保持登录,但这只是失败,在不到60分钟的会话被破坏后,我需要再次登录,有什么建议吗 我的代码:PHP会话不工作,php,ajax,session,session-cookies,Php,Ajax,Session,Session Cookies,这一次,我需要你在一些与php相关的方面的帮助。我的用户脚本没有按预期工作,它应该在3周内保持登录,但这只是失败,在不到60分钟的会话被破坏后,我需要再次登录,有什么建议吗 我的代码: <?php if (!isset($_SESSION)) session_start(); mysql_connect("YOU", "DONT", "NEED") or die("database connection failed"); mysql_select_db("THIS!!!") or d
<?php
if (!isset($_SESSION)) session_start();
mysql_connect("YOU", "DONT", "NEED") or die("database connection failed");
mysql_select_db("THIS!!!") or die("database selection failed");
$user = $_POST['username'];
$pass = $_POST['password'];
$remember = $_POST['remember'];
$token = $_POST['login-token'];
$error;
if(isset($_SESSION['username'])) {
$error = $error." :erlgd:";
}
if(empty($user)){
$error = $error." :erusr:";
}
if(empty($pass)){
$error = $error." :erpwd:";
} else
$password = md5($pass);
if(empty($error)){
$sql = "SELECT * FROM login_users WHERE username='$user' AND password='$password'";
$result = mysql_query($sql);
$count = mysql_num_rows($result);
if($count == 0){
$sql = "SELECT * FROM login_users WHERE email='$user' AND password='$password'";
$result = mysql_query($sql);
$count = mysql_num_rows($result);
if($count == 0){
$error = $error.":erwrg:";
}
}
}
// Once everything's filled out
// Just double check there are no errors first
if($error == '') {
while($row = mysql_fetch_array($result)) {
$minutes = 10080;
if($minutes == 0)
ini_set('sesion.cookie_lifetime', 0);
else
ini_set('session.cookie_lifetime', 60 * $minutes);
session_regenerate_id();
$sql = "SELECT * FROM login_activate WHERE username='$user'";
$count = mysql_num_rows(mysql_query($sql));
if ($count > 0)
$_SESSION['activate'] = 1;
else
$_SESSION['activate'] = 0;
$_SESSION['restricted'] = $row['restricted'];
$_SESSION['name'] = $row['name'];
$user_level = unserialize($row['user_level']);
$_SESSION['user_level'] = $user_level;
$sql = "SELECT level_disabled FROM login_levels WHERE level_level = '$user_level'";
$disRow = mysql_fetch_array(mysql_query($sql));
$_SESSION['level_disabled'] = $disRow['level_disabled'];
if(!empty($remember)) {
ini_set('session.cookie_lifetime', 60*60*24*100); // Set to expire in 3 months & 10 days
session_regenerate_id();
}
// And our magic happens here ! Let's sign them in
$_SESSION['username'] = $row['username'];
unset($_SESSION['token']);
echo "success";
// Redirect after it's all said and done
}
}else{
echo "error:".$error;
}
?>
看看/etc/php5/apache2/php.ini中的session.gc_maxlife
要么在那里更新它,要么尝试将ini\u集('session.gc\u maxlifest',60*60*24*7*3)放入其中代码>位于脚本顶部
增加到更大的数值
基本上,这是服务器在清除会话文件之前等待的时间您需要使用cookie来支持记住我
类型的行为。当服务器上的会话被破坏时,cookie将充当催化剂,在同一用户再次访问您的站点时,以该用户的身份启动新会话,并在后台自动登录
Google搜索会返回一些非常好的结果,最显著的是返回实际的cookie代码(搜索autologin.php) 通常人们使用session\u set\u cookie\u params()来更改会话cookie的生存期。您应该在调用第一个会话_start()之前设置它。默认值通常设置为0(即当用户关闭浏览器窗口时)
您还需要更改会话文件的垃圾收集最大生存期。在会话开始之前,请尝试:
ini_set(’session.gc_maxlifetime’, $lifetime_in_seconds);
共享主机,有什么建议吗?您可以尝试运行ini\u集('session.gc\u maxlifest',60*60*24*7*3)
或要求您的主机提供商更改该值这似乎有效,请更新答案并等到明天,我将看看这是否可以修复它。谢谢是否有办法查看Cookie和会话在登录后是否成功设置?就像浏览器中的会话历史记录?为什么要在while循环中执行此代码?@dqhendricks在循环中?很抱歉,这里没有循环,也许你这么说是因为它先搜索用户,然后再搜索电子邮件。不,我说的是这一行<代码>while($row=mysql\u fetch\u数组($result)){
您是否希望返回多条记录?为什么这是一个循环?@dqhendricks不是真的,但不知道如何更改它,也不知道如何更改其他代码,而且我认为保持它的状态没有任何问题that@Ascherer,我做了,它似乎工作得更好,要等待结果。迈克,谢谢!我不知道,我知道ght cookies和sessions是一样的,现在正在处理此问题,等待明天接受最佳答案。谢谢!有没有办法查看cookies和sessions在登录后是否成功设置?就像浏览器中的sessions historial一样?您可以像普通数组一样参考$\u SESSION
和$\u COOKIE
。例如le,在我的一个项目中,我有$\u COOKIE[$cookiePrefix.\u password']
我用来检查cookie是否已设置为与“wx_密码”匹配。阅读与cookie相关的文档,你会发现这是多么容易。@Luis:你知道吗?有没有办法查看登录后cookie和会话是否已成功设置?就像浏览器中的会话历史记录一样?