Одновременная работа 2 скриптов с одинаковым PHPSESSID

young

Новичок
Одновременная работа 2 скриптов с одинаковым PHPSESSID

Ситуация:
1) Session autostart = On
2) скрипт 1.php: <? echo "helo worls"; ?>
3) скрипт 2.php: <? sleep(30); ?>

Если мы вызывам скрипты с указанием PHPSESSID, то одновременно может работать только один из них:

Т.е. запускаем
/2.php?PHPSESSID=c4e12808b7f3113f6090f4bdc83627cb
потом
/1.php?PHPSESSID=c4e12808b7f3113f6090f4bdc83627cb
И пока не пройдут 30 секунд записаных в sleep второй скрипт не будет отрабатывать

Чего так?
 

confguru

ExAdmin
Команда форума
<[si]> young___ РНР локает файл сессии
<[si]> лоКает
<young___> вот урод. И с этим никак нельзя бороться?
<tony2001> [si]: с чего бы это?
<[si]> tony2001 было как-то такое
<tony2001> [si]: хммм
<tony2001> и точно лочит...
<[si]> tony2001 угу
 

fixxxer

К.О.
Партнер клуба
эммм...
локает вроде.
а если вместо sleep(30) делать
for($i=0;$i<30;$i++) sleep(1)
по идее сработает user abort...

?
 

young

Новичок
Manual:
Optionally you can use shared memory allocation (mm), developed by Ralf S. Engelschall, for session storage. You have to download » mm and install it. This option is not available for Windows platforms. Note that the session storage module for mm does not guarantee that concurrent accesses to the same session are properly locked. It might be more appropiate to use a shared memory based filesystem (such as tmpfs on Solaris/Linux, or /dev/md on BSD) to store sessions in files, because they are properly locked.
 

young

Новичок
Вдогонку

If you have multiple php scripts running simultaneously (for example, in different frames or browser windows) and they use sessions, they won't execute concurrently. The various scripts will block until they have exclusive access to the session variables. If all your scripts finish quickly (as most do) you probably won't notice. But if you have any long-running scripts (e.g. system() or passthru() calls that take a while to finish) you may see some pauses in page rendering. This is well documented in session_write_close(), but might warrant mentioning more prominently here.
 
Сверху