无法登录 php 会话无法启动

Posted

技术标签:

【中文标题】无法登录 php 会话无法启动【英文标题】:Cannot login php session does not start 【发布时间】:2014-03-23 22:07:27 【问题描述】:

有什么事吗?我无法使用 php 会话登录。密码和用户名都匹配,但事物没有创建会话。有什么问题吗?

   if (isset($_POST['submit'])) 

    $sql = "select * from user where email='" . fixstr($_POST['email'])
         . "' and password='" . fixstr($_POST['password']) . "' and active = 1 ";

    $res = mysql_query($sql);
    $rs = mysql_fetch_array($res);
    if ($rs) 
        $_SESSION['user_id'] = $rs['user_id'];
        $_SESSION['email'] = $rs['email'];
        $_SESSION['type'] = $rs['type'];

        if($_SESSION['type']=="Manager")

            updateLastSignIn();
            redirect("");

         else if($_SESSION['type']=="Admin")

            updateLastSignIn();
            redirect('main.php?status=open');               
         else 

            updateLastSignIn();
            redirect('main.php?status=open');
        

     else 
        $msg2 = 'Invalid email or password';




 <table align="center" border="0" cellpadding="2" cellspacing="2" >
 <tr valign="middle">
 <td align="left" style="font-size:16px;"></td>
  </tr>
  </table>
 <form id="form" method="post" class=''>
 <table border="1" align="center" cellspacing="0" cellpadding="0">
 <tr valign="top">
 <td class="boxtitle" align="center">Login portal</td>
  </tr>
 <tr>
 <td>
  <table  border="0" cellpadding="2" cellspacing="1">
    <tr><td colspan="2">&nbsp;</td></tr>
    <tr><td align=right >Username:</td><td align=left ><input type="text" id="email" name="email" class="input-large" placeholder="Type email"/></td></tr>
    <tr><td align=right>Password:</td><td align=left><input type="password" id="password" name="password" class="input-large" placeholder="Type password" /></td></tr>
    <tr><td align="center">&nbsp;</td><td><button type="submit" id="submit" name="submit" class="">&nbsp;&nbsp;&nbsp;&nbsp;Sign in&nbsp;&nbsp;&nbsp;&nbsp;</button></td>   </tr>
    <tr><td colspan="2">&nbsp;</td></tr>
    <tr><td colspan="2" align="center">Registered users may sign in here.</td></tr>
    <tr><td colspan="2" align="center">Register an account click <a href="http://live-freecams.com/sign_up-member.php">here</a></td></tr>        
    <tr><td colspan="2">&nbsp;</td></tr>
  </table>
  </td>
 </tr>
 </table>
</form>

只需添加一个连接,它应该可以工作。为什么我的代码不起作用??????

【问题讨论】:

我们没有 majic glass 来查找问题,所以发布您的代码 .... 如果我不得不猜测,我会说是的。 真的应该可以工作 为什么你不尝试设置另一个条件来检查天气值是否到来?你只是获取了值,而不是直接分配它们我是对的 【参考方案1】:

它可能 PHP 无法自动启动会话。你需要做的是添加

session_start()

在你编码标题。

【讨论】:

“它不起作用”是什么意思?你能解释一下吗?尝试给我们一些调试错误或致命/警告异常?【参考方案2】:

在创建会话之前首先启动会话

@session_start();
if(!isset($_SESSION['user_id'], $_SESSION['email'], $_SESSION['type'] ))

        $_SESSION['user_id'] = $rs['user_id'];
        $_SESSION['email'] = $rs['email'];
        $_SESSION['type'] = $rs['type'];

【讨论】:

@user1844933 ***.com/questions/4151418/…【参考方案3】:

试试这个,看看它是否有效,我希望它会有效。请不要忘记开始会话。

<?php
session_start();

if (isset($_POST['submit'])) 

    $sql = "select * from user where email='" . fixstr($_POST['email'])
         . "' and password='" . fixstr($_POST['password']) . "' and active = 1 ";

    $res= mysql_query($sql);
    $rs = mysql_fetch_array($res);
    if ($_SESSION['user_id'] == $rs['user_id'] && $_SESSION['email'] == $rs['email'] && $_SESSION['type'] == $rs['type'])

            if($_SESSION['type']=="Manager")

                updateLastSignIn();
                redirect("");

             else if($_SESSION['type']=="Admin")

                updateLastSignIn();
                redirect('main.php?status=open');               
             else 

                updateLastSignIn();
                redirect('main.php?status=open');
            

         else 
            $msg2 = 'Invalid email or password';
    
    
    ?>

【讨论】:

【参考方案4】:

您的代码有一些可以改进的地方,而且您至少应该使用一些 var_dumps() 来了解您的代码发生了什么。

尝试对您的代码进行一些更改,使其更具可读性并且更有能力应对缺乏结果。

    // initialize variables
    $email = false;
    $password = false;
    $user = false;
    $sql = false;
    $res = false;
    $msg2 = false;
    // if you are sure that you will get the whole set of results from the database, use this for $rs
    $rs = false;
    // if you may not get some of the results, or they may be null, use this for $rs
    // $rs = array();
    // $rs['user_id'] = false;
    // $rs['email'] = false;
    // $rs['type'] = false;
// var_dump( $_POST );
// var_dump( $_SESSION );


    // Assign values if tey exist
    if ( isset( $_POST['email'] ) !== false ) 
        if ( empty( $_POST['email'] ) === false ) 
            $email = $_POST['email'];
        
    
    if ( isset( $_POST['password'] ) !== false ) 
        if ( empty( $_POST['password'] ) === false ) 
            $password = $_POST['password'];
        
    



    // if you have something to look for, start working
    if ( ( $email !== false ) && ( $password !== false ) )
        $sql = "select * from user where email='" . fixstr( $_POST['email'] ) . "' and password='" . fixstr( $_POST['password'] ) . "' and active = 1 ";
        $res = mysql_query( $sql );
        $rs = mysql_fetch_array( $res );
    



    // If you have results from the query, do something with them
    if ( $rs !== false ) 
        // reconnect/start session
        session_start();
// var_dump( $_POST );
// var_dump( $_SESSION );

        // store values
        if ( $rs['user_id'] !== false ) 
            $_SESSION['user_id'] = $rs['user_id'];
        
        if ( $rs['email'] !== false ) 
            $_SESSION['email'] = $rs['email'];
        
        if ( $rs['type'] !== false ) 
            $_SESSION['type'] = $rs['type'];
            switch ( $rs['type'] ) 
                case "Manager":
                    updateLastSignIn();
                    redirect("");
                    break;
                case "Admin":
                    updateLastSignIn();
                    redirect('main.php?status=open');  
                    break;
                default:
                    // whatever is right for you here
            
         else 
            $msg2 = 'Invalid email or password';
        
    
// var_dump( $_POST );
// var_dump( $_SESSION );

当然,在将它们用于数据库之前,您仍然应该对从 $_POST 接收到的变量进行一些检查和清理。此外,还有其他选项可以改进代码,但我写的只是一些可能有助于发现问题的小改动。

关于会话的开始,你可以向上或向下移动它,我们不知道你项目的整个代码,但考虑到你有什么,我把它放在哪里,似乎是一个不错的选择。

【讨论】:

以上是关于无法登录 php 会话无法启动的主要内容,如果未能解决你的问题,请参考以下文章

如何在取消设置变量后修复会话未启动

当会话 ID 已知但无法启动会话时删除会话变量

在不启动 PHP 会话的情况下检查?

PhpMyAdmin - 错误无法在没有错误的情况下启动会话:如何修复?

was服务无法保持会话

销毁 php 后启动会话