2008-10-27 3 views
6

Я пишу PHP-код, где я хочу сам передать идентификатор сеанса, используя POST. Я не хочу, чтобы cookie хранил сеанс, так как он должен потеряться, когда пользователь выходит из цикла POST.Как отключить cookie сеанса PHP?

PHP автоматически устанавливает cookie, если таковой имеется. Я узнал, что это можно изменить, установив session.use_cookies на 0 в php.ini. К сожалению, у меня нет доступа к этому файлу, и я также не хочу нарушать поведение других скриптов, работающих на одном сервере.

Есть ли способ отключить или аннулировать cookie сессии внутри PHP-скрипта?

EDIT: Поскольку предлагаемые решения не работают для меня, я использовал $ _SESSION = array() в позициях в коде, где я обнаружил, что сеанс должен быть недействительным.

ответ

6

ошибиться его можно переопределить параметры по умолчанию хоста, создав свой собственный файл .htaccess и вот отличный учебник, если вы не тронули его еще http://www.askapache.com/htaccess/apache-htaccess.html

или если вы слишком ленивы, чтобы узнать просто создать «.htaccess» файл (да это имя файл) на каталоге сайтов и поместите следующий код

SetEnv session.use_cookies='0'; 
+0

Спасибо, к сожалению, это не Apache, а очень старый сервер Netscape. – ypnos 2008-10-27 23:46:38

28

Использование ini_set():

ini_set('session.use_cookies', '0'); 

Или в файле php.ini:

session.use_cookies = 0 
+0

Спасибо. который должен решить мою проблему, но, к сожалению, вместо этого PHP останавливается в середине выполнения скрипта (даже в середине вывода html). – ypnos 2008-10-27 23:39:10

+0

Я не буду отмечать это как правильный ответ, так как он запустил PHP. Возможно, ошибка PHP? – ypnos 2008-10-27 23:52:48

+0

Кажется, ничего не происходит. Решение htaccess работало для меня. – Heroselohim 2014-10-06 03:44:32

2

Вы можете также положить, что установка в .htaccess так оно применяется ко всем сценариям, в противном случае вы необходимо обеспечить, чтобы код вызывался по каждому запросу.

Например.

php_value session.use_cookies 0

-2

Способ сделать это состоит в настройке сеансов самостоятельно.

В центральный файл include, в который включены все ваши другие файлы (у вас есть один из них, не так ли?), Вам нужно сделать несколько вещей уже в практическом плане.

if(!array_key_exists('sessionid', $_POST)) { 
    // recreate the sessionid 
    $sessionid = md5(rand().' '.microtime()); // Or something 
} else { 
    $sessionid = $_POST['sessionid']; 

session_id($sessionid); 
session_start(); 

Теперь вы должны помнить, что как только вы начинаете форму, вам необходимо включить:

<input type='hidden' name='sessionid'><?= session_id() ?></input> 
2

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

// Initialize the session. 
// If you are using session_name("something"), don't forget it now! 
session_start(); 

// Unset all of the session variables. 
$_SESSION = array(); 

// If it's desired to kill the session, also delete the session cookie. 
// Note: This will destroy the session, and not just the session data! 
if (isset($_COOKIE[session_name()])) { 
    setcookie(session_name(), '', time()-42000, '/'); 
} 

// Finally, destroy the session. 
session_destroy(); 
1

У меня были проблемы с документированным подходом PHP к уничтожение сессии ж/печенье.

// If it's desired to kill the session, also delete the session cookie. 
// 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"] 
    ); 
} 

Это приводит к моему видя печенье набор дважды:

Set-Cookie: SESSION_NAME=deleted; expires=Sat, 08-Jan-2011 14:09:10 GMT; path=/; secure 
Set-Cookie: SESSION_NAME=1_4f09a3871d483; path=/ 

Как указано в комментариях PHP, установив значение куки на что-то другое, чем пустой («») избавляется от " удалено ", но второй набор файлов cookie остался.

Чтобы избавиться от этого, я должен был добавить код предложенных выше:

ini_set('session.use_cookies', '0'); 

Я не смотрел на источник сеансов обработки, но я думаю, что SetCookie (...) является минуя модуль сессий, поэтому сеансы не знают, что я его назвал. Таким образом, он устанавливает cookie по умолчанию после того, как я настроил удаленный файл cookie.

Я тестировал на макинтош: PHP 5.3.6 с Suhosin-Patch (АОН) (встроенный: 8 сент 2011 19:34:00)

Смежные вопросы