我正在使用uploadify,并且脚本(使用adobe flash)在请求上传操作url时创建一个新会话而不是使用当前会话。为了解决这个问题,我需要提前传递会话 ID。
有没有办法在没有允许会话固定(劫持)的情况下做到这一点?
以下是问题的一些细节: Sessions and uploadify
谢谢!
我正在使用uploadify,并且脚本(使用adobe flash)在请求上传操作url时创建一个新会话而不是使用当前会话。为了解决这个问题,我需要提前传递会话 ID。
有没有办法在没有允许会话固定(劫持)的情况下做到这一点?
以下是问题的一些细节: Sessions and uploadify
谢谢!
在您的脚本中创建一个临时上传会话(未经测试,但您明白能够有几个不同的会话):
<?php
//normal session
session_start();
//store sessionid for retrieval
$oldsessionid = session_id();
if($_SESSION['logged_in']){ //or however you check for a valid user
//stop old/normal session
session_write_close();
//create a new sessionname
$oldname = session_name('UPLOADSESSION');
//create a new id (fixed here, you might want a random number/char combo:
session_id('myuploadsessionid');
//start the session
session_start();
$_SESSION['upload'] = true;
$uploadid = session_id();
//now you can use `'data: "artist="+$fi+"&UPLOADSESSION="'.$uploadid` in uploadify
session_write_close();
}
//return to normal name
session_name($oldname);
//set old session id
session_id($oldsessionid);
//resume normal session
session_start();
因此,在您的接收脚本中:
<?php
session_name('UPLOADSESSION');
session_id($_POST['UPLOADSESSION']);
session_start();
if(isset($_SESSION['upload']) && $_SESSION['upload']){
//accept files
//invalidate session after this upload
$_SESSION['upload'] = false;
}
用户仍然有 2 个 cookie,并且可能 UPLOADSESSION 是固定的,但是您不会将它用于上传之后的任何其他内容,并且仅用于 1 个上传(尽管您可能希望允许更多)。
或者,您可以session_regenerate_id();
在上传后的第一个请求上调用 a (只需在上传时设置一个标志$_SESSION
)。