【问题标题】:Sessions not recognized when going through flash / uploadify通过 flash/uploadify 时无法识别会话
【发布时间】:2011-06-09 17:59:09
【问题描述】:

我正在编写一个使用基于 cookie 的会话进行身份验证的应用程序。一切都很好,直到我尝试将 uploadify jQuery 插件集成到我的网站中。我需要uploadify 将文件发送到我的upload.php 文件。当我检查该upload.php 脚本中是否存在任何已知会话变量时,我什么也得不到。我试过print_r($_SESSION) 并得到一个空数组。

我不确定这是我的 php 会话代码还是我的 jquery uploadify 代码的问题。我在这两方面都有点新意。

/**  INSIDE JQUERY **/
$('.fileUploadify').uploadify({
    'scriptData': {'filesUploaded':'1','PHPSESSID' : <?php echo json_encode(session_id()); ?>},
    ...


/**  UPLOAD.PHP **/
if(isset($_REQUEST['PHPSESSID'])) 
    session_id($_REQUEST['PHPSESSID']);

if(!isset($_GET['logout']) && isset($_SESSION['user']) && $_SESSION['ipadd'] == $_SERVER['REMOTE_ADDR']) {
    define('USERHASH',$_SESSION['user']);
    require_once('lib/ez_sql_core.php');
    require_once('lib/ez_sql_sqlite.php');
    require_once('lib/functions.php');
    $db = new ezSQL_sqlite('./'.USERHASH.'/','fileInformationBase.sqlite');
    $mdb = new ezSQL_sqlite('./','fileServMain.sqlite');

    $stats = $mdb->get_row("SELECT ID,bandwidthUsage,lastLogin,...
} else die('No no no');

upload.php 每次都返回“No no no”。我检查了会话 ID,它 正在 正确发送到 upload.php。

在我的正常页眉上我没有遇到这个问题,我只是用session_start() 开始授权部分,然后是相同的if(isset($_SESSION['user']) &amp;&amp; $_SESSION['ipadd] ...) { 行,它按预期工作。


编辑

这是上面 jQuery 脚本生成的代码

 'scriptData': {'filesUploaded':'1','PHPSESSID' :"m3vgn7j6a7nd3ckppnio1ln3e1" }

在upload.php脚本中输入echo $_REQUEST['PHPSESSID']会打印出来

'sjojolnjtcutbomceh50os3kg4'

【问题讨论】:

    标签: php jquery flash session uploadify


    【解决方案1】:

    不知何故,flash 看到的会话是旧值。我不知道它们是否被缓存或什么。无论如何,我必须通过删除所有 SESSION cookie 并重新开始来“刷新”系统。然后它选择了正确的值。希望这可以在将来节省一些时间。

    【讨论】:

      【解决方案2】:

      如果您告诉您的插件通过常规 GET/POST 参数发送会话 ID,则必须在服务器上启用它。您应该首先通过查看浏览器发出的网络请求(Firefox + FireBug 插件是一个不错的选择)进行调试,以查看您的会话 ID 是否到达服务器。

      如果是这样,请考虑使用 .htaccess:

      php_flag        session.use_trans_sid           on       
      php_flag        session.use_only_cookies        off  
      

      【讨论】:

      • 如果我发送一个简单的字符串,为什么我“需要在服务器上启用它”?服务器不知道这是一个会话 ID。
      • PHP 不会初始化 _SESSION 数组,除非它知道它的 ID。客户端有两种发送方式:通过 cookie 和通过 get/post 参数。如果您的客户端不发送 cookie,它会发送一个参数(可在 firebug 中检测到),在这种情况下,必须将 php 配置为使用非基于 cookie 的会话 id。
      • session_id() 手册中有更多内容:“如果指定了 id,它将替换当前会话 id。为此,需要在 session_start() 之前调用 session_id()。取决于会话处理程序, 会话 id 中不允许所有字符。例如,文件会话处理程序只允许 az AZ 0-9 、(逗号)和 -(减号)范围内的字符!"
      猜你喜欢
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      相关资源
      最近更新 更多