Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP会话不工作_Php_Ajax_Session_Session Cookies - Fatal编程技术网

PHP会话不工作

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相关的方面的帮助。我的用户脚本没有按预期工作,它应该在3周内保持登录,但这只是失败,在不到60分钟的会话被破坏后,我需要再次登录,有什么建议吗

我的代码:

<?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和会话是否已成功设置?就像浏览器中的会话历史记录一样?