【问题标题】:Is it OK to have a php form destination rely on session variables?是否可以让 php 表单目标依赖于会话变量?
【发布时间】:2017-05-06 19:19:13
【问题描述】:

我希望标题有意义。我有一个社交网站,在个人资料页面上,一个 HTML 表单将被提交到一个 php 文件,该文件将使用登录时创建的用户名会话变量将用户输入存储在 MySQL 数据库中,现在简化版本看起来像这样:
HTML:

<html>
    <body>
        <form method='POST' action='destination.php'>
            <input type='text' name='email'/>
            <input type='text' name='location'/>
            <input type='submit' value='Submit'/>
        </form>
    <body>
</html>  

destination.php:

<?php
session_start();
$username = $_SESSION['username'] //from before (e.g. login)

//CONNECT TO MYSQL
$servername = "127.0.0.1";
$sqlusername = "root";
$sqlpassword = "*********";
$dbname = "**********";


$conn =  new mysqli($servername, $sqlusername, $sqlpassword, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = $conn->prepare("insert into users(email, location) values(?, ?) where username=?");
$sql->bind_param("sss", $_POST['email'], $_POST['location'], $username);
$sql->execute();
$sql->close();
$conn->close();

?>

这很好用,但是我在一台正在开发的机器上运行它,并且想知道当多个用户几乎同时发布表单时它会如何实际工作,会话会变得“混乱”吗?我是新手,所以我不确定会话是如何工作的,但上面的代码安全吗?如果不行,我该怎么办?

【问题讨论】:

    标签: php security session


    【解决方案1】:

    会话通过为每个会话创建一个唯一的标识 (UID) 编号来工作 访问者并基于此 ID 存储变量。这有助于防止 两个用户的数据在访问时相互混淆 同一个网页。

    在事情发生后开始会话时 -

    PHP 首先为该特定会话创建一个唯一标识符 这是一个由 32 个十六进制数字组成的随机字符串,例如 3c7foj34c3jj973hjkop2fc937e3443。

    一个名为 PHPSESSID 的 cookie 会自动发送到用户的计算机 存储唯一的会话标识字符串。

    在指定的服务器上自动创建一个文件 临时目录并带有唯一标识符的名称 以 sess_ 为前缀,即 sess_3c7foj34c3jj973hjkop2fc937e3443。

    当 PHP 脚本想要从会话变量中检索值时, PHP 自动从 PHPSESSID cookie,然后在其临时目录中查找 带有该名称的文件和验证可以通过比较两者来完成 价值观。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      • 2015-12-29
      相关资源
      最近更新 更多