【问题标题】:$_SESSION[] Not Getting Set$_SESSION[] 未设置
【发布时间】:2012-10-08 14:12:48
【问题描述】:

我正在创建一个登录系统,当我从 AJAX 连接发送请求时,没有设置会话。 发送连接:

function onSubmit(form){
    var username = form.username.value;
    var password = form.password.value;
    if(username == ''){
        document.getElementById('error').innerHTML='<font color="red"><b>Please enter a username</b></font>';
        return;
    }
    if(password == ''){
        document.getElementById('error').innerHTML='<font color="red"><b>Please enter a password</b></font>';
        return;
    }
    if(username != '' && password != ''){
        document.getElementById('error').innerHTML='';
        showDiv('loadinglogin');    
        var dataString = 'username='+username+'&password='+password;
    $.ajax({  
      type: "POST",  
      url: "util/login.php",  
      data: dataString,  
      success: function(msg) {  
        if(msg == "ok"){
            document.getElementById('error').innerHTML='<font color="green"><b>Login good, redirecting</b></font>';
            hideDiv('loadinglogin');    
            window.location = "test.php";
        }else{
            document.getElementById('error').innerHTML='<font color="red"><b>Invalid login</b></font>';
            hideDiv('loadinglogin');    
        }
      }  
    }); 



    }
}

设置会话/句柄登录:

<?php
include('database.php');
session_start();
function in_db($u,$p){
    $p = md5($p);
    $p = sha1($p);
    $p = sha1($p);
    $p = md5($p);
    $sql = "SELECT * FROM `users` WHERE `username` = '$u' AND `password` = '$p'";
    $result = mysql_query($sql) or die(mysql_error());  
    while($row = mysql_fetch_object($result))
    { 
        return true;    
    }
    return false;
} 
if(isset($_POST['username']) && isset($_POST['password']) && !isset($$_SESSION['user']) && !isset($$_SESSION['pass'])){
    $username = mysql_real_escape_string($_POST['username']);
    $password = mysql_real_escape_string($_POST['password']);
    if(in_db($username,$password)){
        $_SESSION['user'] = $user;
        $_SESSION['pass'] = $pass;
        print("ok");
    }else{
        print("bad");
    }
}else{
    print("bad");
}
?>

不确定我是否做错了:/

编辑:我从 ERROR_LOG 中提取了这个

[18-Oct-2012 07:27:00 UTC] PHP 警告:session_start() [function.session-start]:会话 id 太长或包含非法字符,有效字符为 az、AZ、0- 9 和 '-,' 在 /util/login.php 第 2 行

PHP.ini

register_globals = off
allow_url_fopen = off

expose_php = Off
max_input_time = 60
variables_order = "EGPCS"
extension_dir = ./
upload_tmp_dir = /tmp
precision = 12
SMTP = relay-hosting.secureserver.net
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="


; Only uncomment zend optimizer lines if your application requires Zend Optimizer support

;[Zend]
;zend_optimizer.optimization_level=15
;zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-3.3.3
;zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-3.3.3
;zend_extension=/usr/local/Zend/lib/Optimizer-3.3.3/ZendExtensionManager.so
;zend_extension_ts=/usr/local/Zend/lib/Optimizer_TS-3.3.3/ZendExtensionManager_TS.so


; -- Be very careful to not to disable a function which might be needed!
; -- Uncomment the following lines to increase the security of your PHP site.

;disable_functions = "highlight_file,ini_alter,ini_restore,openlog,passthru,
;             phpinfo, exec, system, dl, fsockopen, set_time_limit,
;                     popen, proc_open, proc_nice,shell_exec,show_source,symlink"

【问题讨论】:

  • 这里有很多错误。几乎在每一行。我建议你从基础教程开始。
  • @itachi 我以前在 PHP 工作过。除了我修复的双 $ 之外,我真的看不出有什么问题。
  • 如果这是您收到的错误消息,您需要检查 php.ini 文件中的 [Session] 部分,看看您是否使用了推荐值。
  • 确实如此。你的 php.ini 看起来怎么样?
  • 不一定是问题的根源,但您使用的是 md5、sha1.... 这也是两次!它有什么意义? 2nd,您正在使用已弃用的 myql_* 函数。第三,mysql_real_escape_string 易受攻击,第四次将会话放在顶部,第五次使用带有准备好的语句的 pdo,第六次使用适当的散列......等等。它与您的问题无关,但您需要注意。

标签: php ajax session


【解决方案1】:

将session_start(); 放在文件的最开头,include() 之前。

【讨论】:

  • 文件的开头无关紧要。唯一重要的一点是,在设置会话之前没有完成其他输出,因为它是 HTTP 标头的一部分。
  • 确实如此,但如果涉及空格怎么办?最好放在一开始就比以后出错?
  • 我同意@itachi,最好把它放在文件的开头。
【解决方案2】:

检查您的代码 - $$_SESSION['user'] 是什么?应该是 $_SESSION?

【讨论】:

    【解决方案3】:

    试试这个:PHP Manual

    并检查您的 $$_SESSION 拼写错误。

    另外,请尝试

    print(session_id());
    

    在开始您的会话之前。

    也试试

    session_id("my_session");
    

    在开始您的会话之前让我们知道结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 2011-07-03
      • 2021-11-29
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多