繁体   English   中英

PHP会话阻塞,忽略session_write_close

[英]PHP sessions are blocking, ignoring session_write_close

我正在尝试提供来自同一浏览器会话的两个几乎同时发出的请求。

请考虑以下最小示例:

<?php

session_start();

$sessionId = session_id();

session_write_close();

$file = sys_get_temp_dir() . '/lock_test';

if (!file_exists($file)) {

    touch($file);

    sleep(5);

    unlink($file);

    echo 'done! ' . $sessionId;

} else {

    echo 'locked! ' . $sessionId;

}

第二个请求应该导致“锁定”输出,但它总是等待第一个请求完成,然后输出“完成”。

Xdebug没有运行。 PHP版本是5.5。

编辑:

投票以关闭这个作为重复。 链接的问题表明,为了解决这个问题,请附加一个随机变量。 所以我建议附加一个requestTime变量并将其设置为一个微秒的时间戳。

这种行为没问题。 如果两个请求共享同一个会话并且您正在使用文件来存储会话数据,那么PHP需要flock()会话文件以防止它被尝试写入文件的多个同时请求损坏。 (当然PHP总是flock()会话文件,但是有多个同意请求共享同一个会话,你可以看到它有效)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM