ホームページ >バックエンド開発 >PHPチュートリアル >uploadify 火狐下上传不成功,错误提示没有session

uploadify 火狐下上传不成功,错误提示没有session

WBOY
WBOYオリジナル
2016-06-06 20:21:191245ブラウズ

<code><script type="text/javascript">
                            $(function() {
                                $('#file_upload').uploadify({
                                    'formData'     : {
                                            'test' : '{$Think.session.name}', //此处获取SESSIONID   
                                       },
                                    'buttonText': '上传附件',
                                    'fileTypeDesc': '可选文件',
                                    'method'   : 'post',
                                    'auto'     : true,
                                    //允许上传的文件后缀
                                    'fileTypeExts': '*.gif; *.jpg',
                                    'swf'      : "__PUBLIC__" +'/uploadify/uploadify.swf',
                                    'uploader' : "__MODULE__"+'/duty/fileup',
                                    'onUploadSuccess': function (file, data, response) {
                                        console.log(file);
                                        console.log(data);
                                        console.log(response);
                                        
                                    }
                                    
                                });
                            });
                        </script></code>

用的thinkphp框架,刚去tp讨论看了好多,尝试了一下都不行。
不太理解到底怎样才算是通过登录验证了。

<code>    public function _initialize(){
        
        // 验证用户是否登陆
        if (!session('?name') or !session('?dutydate')) {
            $this->error('未登录,跳转到登录页面',__MODULE__.'/login/index',3);
        }
        
    }
    </code>

看了一篇这样的文章(http://www.edbiji.com/doccenter/showdoc/54/nav/702.html),情况跟我一样,我不太明白,他这篇文章服务端代码这样写的意义是什么?

<code>//初始化执行
    public function _initialize(){
        //此处为解决Uploadify在火狐下出现http 302错误 重新设置SESSION
        $session_name = session_name();
        if (isset($_POST[$session_name])) {
            session_id($_POST[$session_name]);
            session_start();
        }
            //执行登陆验证检测函数
        $this->powerverify();        
    }</code>

我的是这样的,我只判断session('name') 和 session('dutydate'),
那如果我要接受uploadify,post过来的值。$_POST['test],这就是我当前的session了
我按照文章的意思写,但是我觉得没有任何意义啊?搞不懂这块是什么意思?

<code>    public function _initialize(){

        $session_name = $_POST['test'];
        if (isset($_POST[$session_name])) {
            session('name',$_POST[$session_name]);
            session('[start]');
        }
        
        // 验证用户是否登陆
        if (!session('?name') or !session('?dutydate')) {
            $this->error('未登录,跳转到登录页面',__MODULE__.'/login/index',3);
        }
        
    }</code>

有空的大神,帮忙看下,调试好久了,还是不行,烟都抽完了。。。。

回复内容:

<code><script type="text/javascript">
                            $(function() {
                                $('#file_upload').uploadify({
                                    'formData'     : {
                                            'test' : '{$Think.session.name}', //此处获取SESSIONID   
                                       },
                                    'buttonText': '上传附件',
                                    'fileTypeDesc': '可选文件',
                                    'method'   : 'post',
                                    'auto'     : true,
                                    //允许上传的文件后缀
                                    'fileTypeExts': '*.gif; *.jpg',
                                    'swf'      : "__PUBLIC__" +'/uploadify/uploadify.swf',
                                    'uploader' : "__MODULE__"+'/duty/fileup',
                                    'onUploadSuccess': function (file, data, response) {
                                        console.log(file);
                                        console.log(data);
                                        console.log(response);
                                        
                                    }
                                    
                                });
                            });
                        </script></code>

用的thinkphp框架,刚去tp讨论看了好多,尝试了一下都不行。
不太理解到底怎样才算是通过登录验证了。

<code>    public function _initialize(){
        
        // 验证用户是否登陆
        if (!session('?name') or !session('?dutydate')) {
            $this->error('未登录,跳转到登录页面',__MODULE__.'/login/index',3);
        }
        
    }
    </code>

看了一篇这样的文章(http://www.edbiji.com/doccenter/showdoc/54/nav/702.html),情况跟我一样,我不太明白,他这篇文章服务端代码这样写的意义是什么?

<code>//初始化执行
    public function _initialize(){
        //此处为解决Uploadify在火狐下出现http 302错误 重新设置SESSION
        $session_name = session_name();
        if (isset($_POST[$session_name])) {
            session_id($_POST[$session_name]);
            session_start();
        }
            //执行登陆验证检测函数
        $this->powerverify();        
    }</code>

我的是这样的,我只判断session('name') 和 session('dutydate'),
那如果我要接受uploadify,post过来的值。$_POST['test],这就是我当前的session了
我按照文章的意思写,但是我觉得没有任何意义啊?搞不懂这块是什么意思?

<code>    public function _initialize(){

        $session_name = $_POST['test'];
        if (isset($_POST[$session_name])) {
            session('name',$_POST[$session_name]);
            session('[start]');
        }
        
        // 验证用户是否登陆
        if (!session('?name') or !session('?dutydate')) {
            $this->error('未登录,跳转到登录页面',__MODULE__.'/login/index',3);
        }
        
    }</code>

有空的大神,帮忙看下,调试好久了,还是不行,烟都抽完了。。。。

火狐在用uploadify的时候确实有问题,这是因为火狐的flash无法传递当前域的cookie,官方文档上对这个问题有解决方案。
跟你的代码处理方式类似。
将 session_id 放在url或者post请求中传过去,如果请求中有相关值则使用这个值生成session,否则就使用cookie中的值来获取session。

通过 session_id 获取当前用户session,请求接收后再用 session_id 指定用户session再start
大概如下:

<code>//上传前
$auth = session_id();
//传输该值

//指定session
if(!empty($_POST['auth'])){
    session_id($_POST['auth']);
    session_start();
}else{
    session_start();
}</code>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。