簡體   English   中英

一個PHP /應用程序會話是否對應一個Oracle /數據庫會話?

[英]Does one PHP/application session correspond to one Oracle/database session?

我遇到了一些我沒有想到的行為。 我有一個通過PHP / OCI8啟動的同步過程。 在該過程的開始,有一個SELECT...FOR UPDATE NOWAIT

我做NOWAIT因為我希望用戶與該進程已經運行,而不是他們的瀏覽器等待鎖定的錯誤消息立即通知。

當我從具有兩個單獨的PHP會話的兩台不同的計算機上運行該進程時,我得到了預期的行為:一個運行,而另一個運行ORA-00054: resource busy and acquire with NOWAIT specified

但是,當我在同一瀏覽器上打開兩個選項卡並運行該過程時,第二個選項卡等待30秒以上的時間來完成第一個選項卡,然后運行第二個選項卡-好像我沒有指定NOWAIT

我沒有使用持久連接或任何類型的連接池。 我認為一個單獨的HTTP請求(執行單獨的PHP => Oracle連接)將給我單獨的數據庫會話。 不是嗎?

更新:我發現了這一點:在#6, 如何使用OCI8擴展名連接到Oracle下的http://wiki.oracle.com/page/PHP+Oracle+FAQ 它說:

如果在腳本或httpd服務器會話中多次使用相同的用戶憑據,則PHP將共享/重用連接。 您可以使用oci_new_connect()函數來確保使用新會話。 調用oci_pconnect()函數建立一個在腳本結束時未關閉的持久連接(使下一個腳本中的重新連接更快)。

但是,當我更改為oci_new_connect它不能解決問題。 不同計算機上的不同會話會拋出ORA-00054 ,但是同一瀏覽器上的兩個選項卡會同步訪問,但不遵循NOWAIT

記住,有“ loadsession”,然后有“ savesession”

根據您的會話驅動程序的工作方式,另一個進程可能會在此時間間隔內覆蓋php會話。

好的,這根本不是數據庫問題。 取而代之的是,Firefox 3.6.6將我的同時請求排隊了,而這畢竟不是PHP或DB會話問題。 請參見以下問題,以探索該問題: Firefox是否同步對同一頁面的請求?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM