为用户名和密码启动会话

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 &copy; 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】:

你快到了。

验证 namepassword 有效后(在存储密码时使用 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。

【讨论】:

以上是关于为用户名和密码启动会话的主要内容,如果未能解决你的问题,请参考以下文章

用户使用用户名和密码登录时获取用户 ID

终止会话,重新启动数据库但无法删除用户 Oracle

为所有具有 GUI 会话的用户启动/停止启动代理

使用带有用户名和密码的 cassia 获取会话

不要为匿名用户启动会话

使用 cookie/会话存储用户名、密码 - Java Servlets [关闭]