sessionid — создание идентификатора сессии php, создание избыточного файла cookie

Два одновременных запроса от одного пользователя могут создать два отдельных идентификатора сеанса, отправленных обратно в cookie, и, следовательно, висящий сеанс. Есть ли способы избежать этого или это крайний случай, который не нужно беспокоить (я имею в виду случаи, когда создаются сеансы без истечения срока действия).

Вот очень грубый скрипт для демонстрации:

/* cookie_test.php */

$base_url = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['SERVER_NAME'].'/'.$_SERVER['SCRIPT_NAME'];

set_time_limit(0);

//load this in 2 browser windows first ?queue_setcookie=1
if (isset($_GET['queue_setcookie'])) {

while(@file_get_contents(__DIR__.'/not_so_great_lock') !== 'unlocked');

$not_so_great_id = rand(0,1000);

setcookie(
'SESSION_ID',
$not_so_great_id,
time() + 30,
'/',
$_SERVER['SERVER_NAME'],
false,
true
);

header('Location:'.$base_url.'?output_cookie=1&created_sid='.$not_so_great_id);

}

//run this next ?unblock_queued_cookies=1
if (isset($_GET['unblock_queued_cookies'])) {

file_put_contents(__DIR__.'/not_so_great_lock', 'unlocked');

}

//will redirect here after cookie creation
if (isset($_GET['output_cookie'])) {

echo 'Current Sess ID:'.$_COOKIE['SESSION_ID'].'<br/>';
echo 'Created Sess ID:'.$_GET['created_sid'];

}

Сохраните скрипт как cookie_test.php в localhost.

Открыть 1-й URL> HTTP: //localhost/cookie_test.php queue_cookie = 1

Открыть 2-й URL> HTTP: //localhost/cookie_test.php queue_cookie = 1

Оба окна будут ждать сигнала для создания.

Затем откройте 3-й URL> HTTP: //localhost/cookie_test.php unblock_queued_cookies = 1

Когда сигнал отправляется, первые два окна создают значения идентификатора, но оба отличаются, и последнее выигрывает.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]