Ответ 1
В версиях PHP до 5.4 вы можете просто session_id()
:
$has_session = session_id() !== '';
В PHP версии 5.4+ вы можете использовать session_status()
:
$has_session = session_status() == PHP_SESSION_ACTIVE;
Просто интересно, как проверить, существует ли сеанс 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 - прочитать идентификатор param
Я всегда просто использовал
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) третья страница: a) enter code here
$_ session [ "timepage3" ] = функция даты php; time() простой в использовании
логика: если timepage3 меньше, чем timepage3 на стр. 2 {пользователь перешел на страницу 3 до того, как страница 2 сделала что-то}
если timepage2 на стр. 2 меньше, чем timepage1 {пользователь может попытаться взломать страницу 2, которую мы хотим на странице 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;
}
?>