无法登录 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"> </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"> </td><td><button type="submit" id="submit" name="submit" class=""> Sign in </button></td> </tr>
<tr><td colspan="2"> </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"> </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 会话无法启动的主要内容,如果未能解决你的问题,请参考以下文章