为用户名和密码启动会话
Posted
技术标签:
【中文标题】为用户名和密码启动会话【英文标题】:starting sessions for username and password 【发布时间】:2016-09-25 03:30:24 【问题描述】:我正在尝试创建一个允许用户输入用户名和密码并将其存储为 cookie 的启动 php,因此当他们尝试再次登录时,它将存储密码,因此我正在启动会话,因为最终我想将它作为帖子传递给另一个 php(以验证这是否是正确的密码),但我在开始会话时有点困惑,因为我对会话不太熟悉。 这是我到目前为止所拥有的
<?php
session_start();
$_SESSION["name"] = "";
$_SESSION["password"] = "";
?>
<!DOCTYPE html>
<form action="start.php" method="post">
<head>
<meta charset="utf-8" />
<title>Remember the Cow</title>
<link href="https://webster.cs.washington.edu/css/cow-provided.css" type="text/css" rel="stylesheet" />
<link href="cow.css" type="text/css" rel="stylesheet" />
<link href="https://webster.cs.washington.edu/images/todolist/favicon.ico" type="image/ico" rel="shortcut icon" />
</head>
<body>
<div class="headfoot">
<h1>
<img src="https://webster.cs.washington.edu/images/todolist/logo.gif" />
Remember<br />the Cow
</h1>
</div>
<div id="main">
<p>
The best way to manage your tasks. <br />
Never forget the cow (or anything else) again!
</p>
<p>
Log in now to manage your to-do list. <br />
If you do not have an account, one will be created for you.
</p>
<form id="loginform" action="login.php" method="post">
<div><input name="name" type="text" size="8" autofocus="autofocus" /> <strong>User Name</strong></div>
<div><input name="password" type="password" size="8" /> <strong>Password</strong></div>
<div><input type="submit" value="Log in" /></div>
</form>
<p>
<em>(last login from this computer was ???)</em>
</p>
</div>
<div class="headfoot">
<p>
<q>Remember The Cow is nice, but it's a total copy of another site.</q> - PCWorld<br />
All pages and content © Copyright CowPie Inc.
</p>
<div id="w3c">
<a href="https://webster.cs.washington.edu/validate-html.php">
<img src="https://webster.cs.washington.edu/images/w3c-html.png" /></a>
<a href="https://webster.cs.washington.edu/validate-css.php">
<img src="https://webster.cs.washington.edu/images/w3c-css.png" /></a>
</div>
</div>
</body>
</html>
【问题讨论】:
cookies 和会话是两种不同的机制。当用户关闭浏览器窗口或一段时间不活动后,会话将被清除。 Cookie 会在浏览器中保留一段预定义的时间。当有人登录时,如果他们要记住他们的登录信息,他们应该选择一个复选框。然后,您可以为 cookie 设置加密值,请参阅 php 文档中的 setcookie,然后每次有人访问该站点时,您都可以检查 cookie 是否存在 $_COOKIES['cookie name'] 并在它是有效值时登录它们 【参考方案1】:你快到了。
验证 name 和 password 有效后(在存储密码时使用 password_hash 和 password_verify 以提高安全性),生成并保存唯一会话编号:
session_regenerate_id();
完成此操作后,您可以将该会话 ID 保存到会话表中。 强烈建议您在每次用户更改状态(登录/注销或权限提升)时重新生成 session_id。
我不会在会话中存储密码,也不会依赖用户名。
如果 session_id 与会话数据库中经过身份验证的会话匹配,则会话被验证。要结束会话,请从会话表中删除 session_id 并重新生成 session_id:
unset($_SESSION['SESSIONKEY'];
session_regenerate_id();
这是实现它的最基本方法。有很多方法可以在会话中构建安全性,建议增强它以防止攻击,例如会话劫持和其他类型的攻击。
补充阅读:
When and why I should use session_regenerate_id()?
【讨论】:
【参考方案2】:如果您从数据库中获取数据,那么您可以根据用户名和密码获取数据,并将整个数据存储到会话数组中:
$_SESSION['user'] = mysql_query("select *from users where username = '"+$username+"' and password = '"+$password+"'");
并将用户名和密码存储在系统 cookie 中。 当您手动注销时,然后删除 cookie。
【讨论】:
以上是关于为用户名和密码启动会话的主要内容,如果未能解决你的问题,请参考以下文章