【发布时间】:2014-05-09 12:59:40
【问题描述】:
我正在开发一个 php 应用程序,但在保留会话值时遇到了问题。我有两个文件,一个是侧边栏(sidebar.php)和一个主页(home.php)。我在主页上包含了侧边栏。 侧边栏上有登录控件,我可以成功登录。我知道它已成功登录,因为它向我显示了一条消息 Welcome 'username'。但是当我转到主页时,由于会话值被破坏,因此不会显示欢迎的“用户名”部分。而是显示登录表单。这是为什么呢?
这是主页(sidebar.php)
<?php require_once('connections.php'); ?>
<?php
// if the login button is clicked
if (isset($_POST['btnLogin']))
{
$myusername=$_POST['textusername'];
$mypassword=$_POST['textpassword'];
$result=mysql_query("SELECT * FROM users_table WHERE username='$myusername' and password='$mypassword'");
$count=mysql_num_rows($result);
if($count>=1)
{
$_SESSION['username'] = $row["username"] ;
$_SESSION['userid']= $row["ID"];
}
else
{
//Any code here
}
}
?>
<div class="col-md-12 right-aside">
<?php
if (isset($_SESSION['userid']))
{
echo Welcome : " . $_SESSION['username'];
echo " <a href='logout.php'> | Logout</a>";
}
else //if session is not set
{
echo 'Some html for login form';
}
?>
</div>
以下是首页(home.php)
<?php include("head.php"); ?>
<body>
<div class="container container-body">
<div class="row">
<div class="col-md-9 main-content">
<div class="row">
<p>Some Text Here</p>
</div><!-- /.row -->
</div><!-- /.main-content -->
<div class="col-md-3">
<div class="row">
<?php include 'sidebar.php';?>
</div>
</div>
【问题讨论】:
-
在将值放入会话之前启动会话(如果尚未启动)并将值放入会话中。
-
当我这样做时,它显示以下错误。我做到了,但这会在侧栏上引发错误。警告:session_start() [function.session-start]:无法发送会话缓存限制器 - 标头已发送(输出开始于 C:\xampp\htdocs\trialphp\head.php:38)head.php 基本上是 css 和脚本文件,我已将其导入 home.php。它只包含一些 一些 css 和一些脚本
-
不要习惯使用纯文本密码,.. 首先认为你应该管理的是强哈希/加密(不是 md5,甚至不使用盐)。
mysql_已弃用,没有字符串转义,没有session_start()? -
我省略了很多代码,这些代码与我的问题无关,例如查询和加密。但我想了解更多关于加密的信息,我实际使用的是 $mypassword=$_POST['textboxPassword']; $mypassword = stripslashes($mypassword); $mypassword = mysql_real_escape_string($mypassword); $mypassword = md5($mypassword);如果我能做些什么让它变得更好,我会全力以赴:)
-
@Enq,处理密码的正确方法是,(简而言之),当用户注册时,使用
sha1($password)对密码进行哈希处理,然后将其插入到您的数据库中。然后当用户登录时,获取提交的密码,使用相同的方法(sha1($password))对其进行哈希处理,然后将数据库中的密码与您刚刚哈希处理的密码进行比较。这可以防止任何人知道密码是什么。