Просто интересно, как проверить, существует ли PHP-сессия … Я понимаю, что независимо от того, что, если я использую сеансы, я должен запустить свои файлы с session_start (), чтобы даже получить доступ к сеансу, даже если я знаю, что он уже существует ,
Я прочитал пользователю session_id (), чтобы узнать, существует ли сеанс, но поскольку я должен использовать session_start () перед вызовом session_id (), а session_start () создаст новый идентификатор, если сеанс отсутствует, как могу ли я проверить, существует ли сеанс?
В версиях PHP до 5.4 вы можете просто использовать функцию session_id()
:
$has_session = session_id() !== '';
В PHP версии 5.4+ вы можете использовать session_status()
:
$has_session = session_status() == PHP_SESSION_ACTIVE;
isset($_SESSION)
Это должно быть так. Если вы хотите проверить, существует ли одна переменная сессии, используйте if(isset($_SESSION['variablename']))
.
В PHP есть что-то, называемое именем сеанса. Имя связано с куки-файлом, которое будет установлено, если сеанс уже запущен.
Таким образом, вы можете проверить массив $_COOKIE
если есть доступ к cookie сеанса. Обычно файлы cookie являются предпочтительной формой для обмена идентификатором сеанса для имени сеанса с браузером.
Если файл cookie уже существует, это означает, что сеанс PHP был запущен ранее. Если нет, то session_start()
создаст новый идентификатор сеанса и сеанс.
Второй способ проверить это – проверить исходящие заголовки, если там установлен файл cookie для сеанса. Он будет установлен, если это новый сеанс. Или если идентификатор сеанса изменился.
Я нахожу это много раз (в зависимости от характера приложения), чтобы просто проверить, установлен ли в клиенте cookie сеанса:
<?php if (isset($_COOKIE["PHPSESSID"])) { echo "active"; } else { echo "don't see one"; } ?>
Конечно, замените имя сеанса по умолчанию «PHPSESSID» на любой пользовательский, который вы используете.
isset ($ _ SESSION) недостаточно, потому что если сеанс был создан и уничтожен (с session_destroy()
) в одном и том же исполнении, isset ($ _ SESSION) вернет true . И эта ситуация может произойти, если вы не знаете об этом, когда используется сторонний код. session_id()
корректно возвращает пустую строку, но может быть вызвана до session_start()
.
Вы можете вызвать session_id перед session_start. http://www.php.net/manual/en/function.session-id.php – прочитайте параметр id
Я всегда просто использовал
if (@session_id() == "") @session_start();
Еще не подвел меня.
Это довольно долгое время.
ПРИМЕЧАНИЕ . @
Просто подавляет предупреждения.
Сохраните session_id
в $_SESSION
и проверьте его.
Первый раз
session_start(); $_SESSION['id'] = session_id();
Запускает сеанс и сохраняет случайный идентификатор сеанса.
В следующий раз
session_start(); $valid_session = isset($_SESSION['id']) ? $_SESSION['id'] === session_id() : FALSE; if (!$valid_session) { header('Location: login.php'); exit(); }
Запускает сеанс, проверяет, идентичны ли текущий идентификатор сеанса и сохраненный идентификатор сеанса (с тройной заменой несуществующего короткого замыкания AND на php). Если нет, запросите логин снова.
отключите отчет об ошибках, если примечание работает в вашей версии php, положите верхнюю часть на ваш php-код
error_reporting(0);
Проверьте, существует ли сеанс до вызова session_start ()
if(!isset($_SESSION))session_start();
Я решил это три года назад, но я случайно удалил файл с моего компьютера.
так оно и было. 3 страницы, которые пользователь должен был посетить в том порядке, в котором я хотел.
1) вверху каждой php-страницы enter code here
session start (); enter code here
2) первая страница: a) enter code here
$ _session ["timepage1"] = функция даты php; time () простой в использовании b) enter code here
$ _session ["timepage2"] = $ _session ["timepage1"]; b) enter code here
$ _session ["timepage3"] = $ _ session ["timepage1"]; 3) вторая страница: a) enter code here
$ _session ["timepage2"] = функция даты php; time () простой в использовании b) enter code here
$ _session ["timepage3"] = $ _session ["timepage3"]; 3) Третья страница: а) enter code here
$ _session ["timepage3"] = функция даты php; time () простой в использовании
логика: если timepage3 меньше, чем timepage3 на странице 2 (пользователь перешел на страницу 3 до того, как страница 2 сделала что-то}
если timepage2 на странице 2 меньше, чем timepage1 {пользователь может пытаться взломать страницу два, мы хотим, чтобы они на странице 1 сделали что-то}
timepage1 никогда не должна равняться timepage2 или timepage3 на любой странице, кроме page1, потому что, если она не больше на страницах два или три, пользователь может попытаться взломать «сделать что-то»,
вы можете делать сложные вещи с простой арифметикой с тремя переменными timepage1-2-3. вы можете либо перенаправить, либо отправить сообщение, пожалуйста, перейдите на страницу 2. вы также можете указать, если пользователь пропустил страницу 2. затем вернитесь на страницу 2 или на первую страницу, но лучшая функция безопасности не говорит ничего, что нужно перенаправить обратно на страницу1.
если вы enter code here
echo time (); на каждой странице во время тестирования вы увидите последние 3 цифры, если вы заходите в правильном порядке.
этот код может помочь!
<?php session_start(); if(isset($_SESSION['visit'])) { echo "you have visit this page before!"; } else { echo "Welcome In Our Site"; $_SESSION['visit'] = 1; } ?>