PHP Session Upload使用自定义会话处理程序的进度

时间:2013-01-16 15:36:01

标签: php session

PHP5.4提供Session Upload Progress指示。我注意到它有效,但仅当session.save_handler设置为files时,session.name才会被修改。只要我修改这些值,超级全局$_SESSION['upload_progress_<key>']就会为空/未设置。

是否可以提供会话上传进度指示,但是有自定义会话处理吗?甚至保存处理程序memcache都不起作用......

2 个答案:

答案 0 :(得分:2)

正如@Marc指出的那样:会话上传进度指示正在运行,而正在进行上传,控制之前的将被移交给用户的PHP代码。因此,php上传处理程序使用.ini文件中的配置数据集,并且只能使用当时可用的模块。

只要在memcache文件中配置了所有内容,就可以使用.ini保存处理程序或指定其他会话名称:

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")指定这些设置,因为执行得太晚。

答案 1 :(得分:0)

虽然session.upload_progress确实只有在session.save_handler设置为files时才能工作,但仍然可以管理它。在您正在检查上载进度的ajax调用中,只需避免使用用户session.save_handler。上传完成后,您可以通过在用户会话的设置中执行以下操作来删除将留在临时目录中的不需要的sess_xxx文件:

//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');