Как использовать Jquery Ajax для установки $ _SESSION? - PullRequest
2 голосов
/ 26 февраля 2010

Я пытаюсь создать простую систему входа в систему, которая использует ajax, но проблема, с которой я сталкиваюсь, не устанавливает $ _SESSION.

login.js:

 $('#bt-login').click(function(){
        var login = $('#login').serialize();
        $.ajax({
            type: "POST",
            url: 'widgets/Login/loginFunction.php',
            data: login,
            cache: false,
            success: function(msg){alert(msg)}
        });
});

loginFunction.php:

 <?php
     include_once '../../dbConfig.php';
     include_once '../../config.php';

     session_start();

      $usr = mysql_escape_string($_POST['username']);
      $pass = mysql_escape_string($_POST['password']);
      $remember = intval($_POST['rememberMe']);

      $row = mysql_fetch_assoc(mysql_query("SELECT usr, id FROM members WHERE usr='".$usr."' AND pass='".md5($pass)."'"));

      if($row['usr']){
          $_SESSION['usr'] = $row['usr'];
          $_SESSION['id'] = $row['id'];
          $_SESSION['rememberMe'] = $remember;
          setcookie('DirtPileGames',$remember);
      }

 ?>

Теперь по какой-то причине loginFunction.php не устанавливает $ _SESSION. Я делаю обновление и $ _SESSION пусто.

Есть ли у кого-нибудь идеи, почему это не сработает.

Ответы [ 3 ]

2 голосов
/ 26 февраля 2010

Убедитесь, что вы вызываете session_start () каждый раз, когда вы хотите получить доступ или установить переменные сеанса. Он будет пустым при обновлении страницы, если только вы не вызовете session_start ().

1 голос
/ 26 февраля 2010

Не знаю конкретной проблемы, потому что сессия должна быть действительной, если вы случайно не где-то вызываете session_destroy (). Несколько советов по отладке - убедитесь, что session_id () соответствует страницам; если нет, то происходит что-то смешное. Можно попробовать явно вызвать session_write_close (). Кроме того, установите значение в $ _SESSION для случая ошибки (когда пользователь не существует), чтобы убедиться, что это не простая логическая ошибка. Кроме того, не используйте md5, пожалуйста. Используйте какой-нибудь вариант ша и посолите.

Редактировать: вы упоминаете session_name ()

Этот вызов фиксирует имя сеанса, чтобы вы могли обращаться к нему на других страницах. Если вы выполняете session_start () на другой странице, не называя сеанс одинаковым образом, он порождает новый сеанс с новым идентификатором.

Примечание из документации php: имя сеанса сбрасывается до значения по умолчанию, которое хранится в файле session.name во время запуска запроса. Таким образом, вам нужно вызывать session_name () для каждого запроса (и перед вызовом session_start () или session_register ()).

0 голосов
/ 26 февраля 2010

Сеансы зависят от файлов cookie, попробуйте пропустить

setcookie('DirtPileGames',$remember);

Посмотрите, не поможет ли это решить проблему, множество проблем зависит от вашего стека php.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...