Сессии PHP не работают - PullRequest
       7

Сессии PHP не работают

0 голосов
/ 28 февраля 2012

На этот раз мне нужна твоя помощь в связи с 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: В качестве дополнительных данных это общий сервер.

Ответы [ 3 ]

1 голос
/ 28 февраля 2012

Вам нужно будет использовать куки для поддержки типа поведения remember me. Когда сеанс уничтожается на сервере, файл cookie служит катализатором для запуска нового сеанса от имени того же пользователя, когда они повторно посещают ваш сайт и автоматически регистрируют его за кулисами.

Поиск в Google возвращает довольно неплохие результаты, в частности ссылку на фактический код cookie (поиск autologin.php).

1 голос
/ 28 февраля 2012

Взгляните на session.gc_maxlifetime в /etc/php5/apache2/php.ini

Либо обновите его там, либо попробуйте добавить ini_set('session.gc_maxlifetime', 60*60*24*7*3); в ваш скрипт вверху

Увеличьте это до чего-то большего

В основном, это то, как долго сервер ожидает очистки файлов сеанса

0 голосов
/ 28 февраля 2012

обычно люди используют 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);
...