Intereting Posts
Проверка тайм-аута сеанса в Laravel Отключить аутентификацию api woocomerce? PHP Вызов неопределенной функции Форма Symfony 2 с избранным списком Микроструктура (например, Flask или Sinatra) для PHP Как передать параметры Joomla на страницу iframe (wrapper)? mySQL не удалось получить сообщения за последние 24 часа и последние 60 минут Magento: добавление пошлин / налогов к котировке во время обзора Использование разбиения на страницы с строкой запроса для формы поиска, которая имеет метод, установленный для получения в codeigniter Как конвертировать VML в png с помощью php Изменение фонового изображения исходного изображения PHP imagecopymerge прозрачно для черного Отфильтровать заказы с помощью WP_Query из массива идентификаторов заказов в WooCommerce PHP игнорирует сертификаты ssl при подключении к MySql PHP Datetime не может преобразовать отрицательную дату ISO8601 Хранить данные сенсибилизации в Silverstripe 3.1

PHP session_regenerate_id и браузер Blackberry

Приветствую,

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

ОБНОВЛЕНИЕ Похоже, что сеансы вообще не работают. Выбрал session_regenerate_id (), чтобы увидеть, будет ли он работать, и он просто перенаправляет меня каждый раз, как будто $_SESSION['MD_SESS_ID'] пуст. На самом деле, все идеи были бы оценены. Cookies на устройстве включены, используя 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(); } ?> 

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

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

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

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