簡體   English   中英

PHP會話不起作用

[英]PHP Sessions not working

這一次,我需要你的幫助與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;
        }



?>

謝謝!

PS:作為附加數據,這是一個共享服務器。

看看/etc/php5/apache2/php.ini中的session.gc_maxlifetime

要么在那里更新,要么嘗試輸入ini_set('session.gc_maxlifetime', 60*60*24*7*3); 在你的腳本頂部

把它增加到更大的東西

基本上,這是服務器在清除會話文件之前等待的時間

您將需要使用cookie來支持remember me的行為類型。 當在服務器上銷毀會話時,cookie將作為催化劑,以便當他們重新訪問您的站點並在后台自動登錄時,以同一用戶的身份啟動新會話。

谷歌搜索會返回一些非常好的結果,最明顯的是對實際cookie代碼的引用 (搜索autologin.php)。

通常人們使用session_set_cookie_params()來改變會話cookie的生命周期。 你應該在調用第一個session_start()之前設置它,我相信。 默認設置通常設置為0(即用戶關閉瀏覽器窗口時)。

http://www.php.net/manual/en/function.session-set-cookie-params.php

您還需要更改會話文件的垃圾收集最大生命周期。 在會話開始之前,請嘗試:

ini_set(’session.gc_maxlifetime’, $lifetime_in_seconds);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM