php - 分配 $_SESSION 变量
问题描述
如果我要使用 $_GET 方法来获取用户名,如果我有多个用户登录,我会遇到问题。最新登录的用户会覆盖其他用户的信息(不在数据库中),如果前一个用户用户试图谈论他们的用户名将是最新用户的用户名。
前任。用户 Xp10d3 登录。他的用户名仍然是 Xp10d3。用户 IiBlurBeriI 登录。Xp10d3 的用户名突然变成了 IiBlurBeriI 的用户名。
我知道这样做的原因,但我想知道是否要将 $_SESSION 变量分配给 $_GET 变量,该变量会保持静态而不改变吗?如果没有,我该如何解决这个问题?
login_check_update.php:
<?php
session_start();
/* Sends an email to the user and adds the special key to another database */
$username = $_GET['username']; /* Gets the username that was submitted in the HTML form. */
$password = $_GET['password']; /* Gets the password that was submitted in the HTML form. */
$servername = "localhost"; /* MySQL database. Change if needed! Most of the time its not localhost unless you're hosting on your computer. */
$user = 'usernamelol'; /* MySQL username. Change if needed. */
$pass = 'passwordlol'; /* MySQL password. Change if needed. */
$dbname = 'vibemcform'; /* MySQL database name. Change if needed. */
$bytes = random_bytes(10); /* Randomized code */
$key = bin2hex($bytes); /* Makes the randomized code */
$link = "live.php";
$con = new mysqli($servername, $user, $pass, $dbname); /* Connects to the database */
$query = mysqli_query($con, "SELECT * FROM data WHERE (USERNAME = $username) AND password = $password");
if (!$query || mysqli_num_rows($query) == 1) {
echo "Found data in the database! Visit the chat!";
echo "<form action='live.php' method='post'><a href='".$link."'><input type='submit' name='btn1' value='$username'/></a></form>";
echo "Session ID: ". session_id() . ". ";
} else {
echo "Username not found/password incorrect. Please try again!";
}
$conn = null;
echo 'Username submitted: ' . $username . ' Password submitted: ' . $password . ' .'; exit;
?>
以下代码并不真正相关,因为我主要是复制它,因为我不知道如何进行实时聊天,但我了解其中的 98%:live.php:
<?php
session_start();
$username = $_POST['btn1'];
//Create a session of username and logging in the user to the chat room
if(isset($_POST['username'])){
$_SESSION['username']=$username;
}
//Unset session and logging out user from the chat room
if(isset($_GET['logout'])){
unset($_SESSION['username']);
header('Location:logout.php');
}
?>
<html>
<head>
<title>Simple Chat Room</title>
<link href='http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,400,300' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="css/style.css" />
<script type="text/javascript" src="js/jquery-1.10.2.min.js" ></script>
</head>
<body>
<div class='header'>
<h1>
SIMPLE CHAT ROOM
<?php // Adding the logout link only for logged in users ?>
<?php if(isset($_SESSION['username'])) { ?>
<a class='logout' href="?logout">Logout</a>
<?php } ?>
</h1>
</div>
<div class='main'>
<?php //Check if the user is logged in or not ?>
<?php if(isset($_SESSION['username'])) { ?>
<div id='result'></div>
<div class='chatcontrols'>
<form method="post" onsubmit="return submitchat();">
<input type='text' name='chat' id='chatbox' autocomplete="off" placeholder="ENTER CHAT HERE" />
<input type='submit' name='send' id='send' class='btn btn-send' value='Send' />
<input type='button' name='clear' class='btn btn-clear' id='clear' value='X' title="Clear Chat" />
</form>
<script>
// Javascript function to submit new chat entered by user
function submitchat(){
if($('#chat').val()=='' || $('#chatbox').val()==' ') return false;
$.ajax({
url:'chat.php',
data:{chat:$('#chatbox').val(),ajaxsend:true},
method:'post',
success:function(data){
$('#result').html(data); // Get the chat records and add it to result div
$('#chatbox').val(''); //Clear chat box after successful submition
document.getElementById('result').scrollTop=document.getElementById('result').scrollHeight; // Bring the scrollbar to bottom of the chat resultbox in case of long chatbox
}
})
return false;
};
// Function to continously check the some has submitted any new chat
setInterval(function(){
$.ajax({
url:'chat.php',
data:{ajaxget:true},
method:'post',
success:function(data){
$('#result').html(data);
}
})
},1000);
// Function to chat history
$(document).ready(function(){
$('#clear').click(function(){
if(!confirm('Are you sure you want to clear chat?'))
return false;
$.ajax({
url:'chat.php',
data:{username:"<?php echo $_SESSION['username'] ?>",ajaxclear:true},
method:'post',
success:function(data){
$('#result').html(data);
}
})
})
})
</script>
<?php } else { ?>
<div class='userscreen'>
<form method="post">
<input type='text' class='input-user' placeholder="ENTER YOUR NAME HERE" name='username' />
<input type='submit' class='btn btn-user' value='START CHAT' />
</form>
</div>
<?php } ?>
</div>
</body>
</html>
解决方案
$_SESSION[""] 变量是全局变量。我以前不知道,但我现在知道了。我刚刚为每个注册的用户分配了每个变量。
<!DOCTYPE HTML>
<html>
<head>
<style>
body {
text-align: center;
font-family: sans-serif;
}
a {
text-decoration: none;
color: blue;
}
#logout {
margin: 0 auto;
text-align: center;
border: 1px solid;
border-radius: 5px;
max-width:1024px;;
height: 800px;
}
</style>
</head>
<body>
<div id="logout">
<?php
session_start();
/* Sends an email to the user and adds the special key to another database */
$username = $_GET['username']; /* Gets the username that was submitted in the HTML form. */
$password = $_GET['password']; /* Gets the password that was submitted in the HTML form. */
$email = $_GET['email']; /* Gets the email that was submitted in the HTML form. */
$servername = "localhost"; /* MySQL database. Change if needed! Most of the time its not localhost unless you're hosting on your computer. */
$user = 'xxxx'; /* MySQL username. Change if needed. */
$pass = 'xxxx'; /* MySQL password. Change if needed. */
$dbname = 'vibemcform'; /* MySQL database name. Change if needed. */
$bytes = random_bytes(10); /* Randomized code */
$key = bin2hex($bytes); /* Makes the randomized code */
$con = new mysqli($servername, $user, $pass, $dbname); /* Connects to the database */
$query = mysqli_query($con, "SELECT * FROM `data` WHERE USERNAME='".$username."'"); /* Gets the username that was submitted */
$hash = password_hash($password, PASSWORD_DEFAULT);
$_SESSION['hash'] = $hash;
$_SESSION['password_not'] = $password;
if (mysqli_num_rows($query) > 0) { /* If the username exists... */
echo "ERROR: Username already exists. Please try signing up again.";
$con -> close();
exit;
} else { /* If the username DOESN'T exist... */
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $user, $pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO dont (STR, USERNAME, PASSWORD, EMAIL)
VALUES ('$key', '$username', '$hash', '$email')"; /* Insert all the data to the database */
$conn->exec($sql);
}
catch(PDOException $e) {
echo $sql . "<br>" . $e->getMessage();
}
}
$conn = null;
$msg = "localhost/vibemcform/verify.php?str=". $key . " Please verify your email!";
$msg = wordwrap($msg,70);
/*
$headers = array("From: xp10d363@gmail.com",
"X-Mailer: PHP/" . PHP_VERSION
);
*/
if (mail($email,"Verify your email",$msg/*, $headers*/)) {
echo 'Message accepted to your email address! Check your email to verify your account.';
} else {
echo 'Message not sent to your email. Contact the owner of the website!';
}
exit;
?>
<a href="index.html">Home</a>
</div>
</body>
</html>
推荐阅读
- python - Pandas:如果满足条件,则使用局部平均值填充
- javascript - 如何用空格分割字符串,并保持逗号分开?
- c++ - 我想了解这个断言宏
- python - 将 python 对象转换为 pandas 数据框
- python - 使用附加元素工作 python-C numpy-C API 段错误
- tensorflow - 添加其他指标以计算性能
- java - 面板填充Java swing中的窗口
- android - 从 PreferenceFragmentCompat 片段切换后
- laravel - 如何让 psql 写入连接与 AWS Aurora 只读副本扩展一起正常工作
- django-rest-framework - Django Rest Framework:序列化将字符串列表拆分为字符列表