PHP session_regenerate_id и браузер Blackberry - PullRequest
4 голосов
/ 05 января 2011

Привет,

Я работаю в системе входа в систему и зацикливаюсь на аутентификации браузеров Blackberry. Кажется, у них есть проблема с PHP session_regenerate_id (), может кто-нибудь предложить альтернативу? Вот сценарии авторизации и входа в систему:

UPDATE Казалось бы, сессии вообще не работают. Вытащил session_regenerate_id (), чтобы посмотреть, сработает ли он, и он просто перенаправляет меня каждый раз, как если бы $_SESSION['MD_SESS_ID'] были пустыми. Действительно застрял здесь, любые идеи будут оценены. Файлы cookie на устройстве активируются с использованием Blackberry Bold 9650. Он работает на моем iPod Touch и во всех браузерах на моем ПК.

Войти

<?php
session_start();
include $_SERVER['DOCUMENT_ROOT'] . '/includes/pdo_conn.inc.php';
//Function to sanitize values received from the form. Prevents SQL injection
function clean($str) {
 $str = @trim($str);
 if(get_magic_quotes_gpc()) {
  $str = stripslashes($str);
 }
 return $str;
}
$username = clean($_POST['username']);
$password = clean($_POST['password']);

if ($username != "" && $password != "") {
 $getUser = $db->prepare("SELECT id, username, password, salt FROM uc_dev WHERE username = ? LIMIT 1");
 $getUser->execute(array($username));
 $userDetails = $getUser->fetch();
 $dbPW = $userDetails['password'];
 $dbSalt = $userDetails['salt'];
 $hashedPassword = hash('sha512', $dbSalt . $password);
 if ($hashedPassword == $dbPW) {
  //Login Successful
  session_regenerate_id();
  $_SESSION['MD_SESS_ID'] = $userDetails['id'];
  header('Location: http://somewhere.com');
  session_write_close();
 } else {
  header('Location: http://www.somewhere.com');
  exit();
 }
} else {
 header('Location: http://somewhere.com');
 exit();
}
?>

Auth

<?php
//Start the session
session_start();
//Verify that  MEMBER ID session is present
if(!isset($_SESSION['MD_SESS_ID']) || (trim($_SESSION['MD_SESS_ID']) == '')) {
  $_SESSION = array();
  // Note: This will destroy the session, and not just the session data!
  if (ini_get("session.use_cookies")) {
   $params = session_get_cookie_params();
   setcookie(session_name(), '', time() - 42000,
   $params["path"], $params["domain"],
   $params["secure"], $params["httponly"]
   );
  }
  // Finally, destroy the session.
  session_destroy();
  header("Location: http://somewhere.com");
  exit();
 }
?>

1 Ответ

2 голосов
/ 05 января 2011

Некоторое время назад я занимался разработкой Blackberry и обнаружил, что браузер не может обрабатывать несколько файлов cookie с одним и тем же именем.Не уверен, что они это исправили.

Так что, если вы отправляете заголовок Set-Cookie более одного раза (используя setcookie, session_start или session_regenerate_id), используя один и тот жеимя каждый раз, это может быть причиной вашей проблемы.

Возможно, вы захотите отслеживать файлы cookie, которые необходимо вывести, в объекте или массиве, и отправлять их только в браузер в самом концезапрос.Таким образом, если вам нужно изменить их значения в середине запроса, вы можете просто перезаписать значение массива, а не отправлять другой заголовок cookie.

Эта страница также может помочь- кто-то связался с ним со страницы PHP session_regenerate_id.

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