从这里开始:PHP $_SESSION is server side or local?我知道会话只是服务器端,客户端无法修改它。
所以我假设从数据库到客户端会话ID设置id是一种安全的方法,并将其作为标识插入到数据库中?
例如,我现在正在这样做以便在我的所有页面上进行识别:login.php
$result = mysqli_query($con, "SELECT id, name, password FROM user_data WHERE email_address = '$email' AND status = '1'") or die(mysqli_error($con));
$row = mysqli_fetch_assoc($result);
if (password_verify($password, $row["password"])) {
$userinfo = array();
$userinfo['id'] = $row["id"];
$userinfo['name'] = $row["name"];
$_SESSION['userinfo'] = $userinfo;
header ("Location: insert.php");
}
和insert.php
页
$result = mysqli_query($con,"INSERT INTO client_data (`data`, `id`) VALUES ('$value', ".$_SESSION['userinfo']['id'].")");
答案 0 :(得分:1)
$_SESSION['userinfo']['id']
只有你做得安全。
信任其中的任何内容意味着信任所有可公开访问的PHP脚本才能正常工作,不可能滥用它们将$_SESSION['userinfo']['id']
设置为令人讨厌的东西。
这真的很有信心。 我觉得这不算实惠。 特别是当使用准备好的陈述可以更安全地完成这项工作时。
if ($stmt = $mysqli->prepare("INSERT INTO client_data (`data`, `id`) VALUES (?, ?)")) {
/* bind parameters for markers */
$stmt->bind_param("s", $value);
$stmt->bind_param("s", $_SESSION['userinfo']['id']);
/* execute query */
$stmt->execute();
/* bind result variables */
$stmt->bind_result($result);
/* fetch value */
$stmt->fetch();
/* close statement */
$stmt->close();
}
使用预准备语句还可以获得RDBMS优化查询的额外好处,使重复查询更快。