簡體   English   中英

自定義會話處理程序的PHP會話上傳進度

[英]PHP Session Upload Progress with custom session handler

PHP5.4提供了會話上傳進度指示。 我注意到它可以工作,但session.save_handlersession.save_handler設置為files ,而session.name不會被修改。 修改這些值后, $_SESSION['upload_progress_<key>']全局$_SESSION['upload_progress_<key>']為空/未設置。

是否可以提供會話上傳進度指示,但具有自定義會話處理功能? 甚至保存處理程序memcache也無法運行...

作為@Marc指出:會議上傳進度指示運行上傳正在進行中,並控制之前移交給用戶的PHP代碼。 結果,php上傳處理程序使用.ini文件中設置的配置數據,並且只能使用當時可用的模塊。

只要所有內容都在.ini文件中配置,就可以使用memcache保存處理程序或指定其他會話名稱:

session.save_handler = memcache
session.save_path = "tcp://198.51.100.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15,tcp://198.51.100.2:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
session.name = "myUploadProgressSession"

無法通過代碼中的ini_set("session.save_handler", "memcache")指定這些設置,因為這執行得太晚了。

雖然確實只有在將session.save_handler設置為文件的情況下session.upload_progress才可以工作,但是仍然可以對其進行管理。 在您要檢查上傳進度的ajax調用中,只需避免使用user session.save_handler。 上傳完成后,您可以通過在用戶會話的設置中執行以下操作,刪除不需要的sess_xxx文件,這些文件將保留在temp目錄中:

//setup the garbage collection parameters which will be used by both the user and file session.save_handler

ini_set('session.gc_maxlifetime', $this->tempo);
ini_set('session.gc_probability', '1');
ini_set('session.gc_divisor', '100');

//destroy the sess_xxx files left from the file session.save_handler for *this* session 
//and let the GC remove any which are left over from the file save_handler for *other sessions*

ini_set('session.save_handler', 'files');
session_start();
session_unset();
session_destroy(); //this will remove the sess_xxx temp files

//now set the handler to user defined

ini_set('session.save_handler', 'user');

暫無
暫無

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

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