注册后自动登录
问题描述:
我希望用户在注册后自动登录,尝试了几个小时,但目前为止没有任何工作。任何帮助表示赞赏!注册后自动登录
创建会话上的index.php代码:
<?php
session_start();
require("inc/user.functions.php");
$sessionkey = "";
if(isset($_SESSION['sessionkey']))
$sessionkey = $_SESSION['sessionkey'];
$account = new Account($sessionkey);
user.funtions.php:(登录,注册等)
<?php
require("config.php");
require("global.functions.php");
class Account {
public $LoggedIn = false;
public $Username;
public $level;
public $uid;
public $Avatar;
public $admin;
public $Email;
public $Bio;
public function __construct($sessionkey) {
if($sessionkey != "" && $this->session_check($sessionkey) == true) {
$this->LoggedIn = true;
}
}
private function session_check($sessionkey) {
global $mysql;
$query = $mysql->query("SELECT * FROM table_users WHERE sessionkey = '$sessionkey'");
$check = $query->num_rows;
if($check > 0) {
while($row = $query->fetch_assoc()) {
$this->uid = $row['uid'];
$this->Username = $row['username'];
$this->level = $row['level'];
$this->Avatar = $row['avatar'];
$this->admin = $row['admin_access'];
$this->Email = $row['email'];
$this->Bio = $row['bio'];
}
return true;
}
return false;
}
}
function login_account($username, $password) {
global $mysql;
$query = $mysql->query("SELECT * FROM table_users WHERE username = '$username' OR email = '$username'");
$check = $query->num_rows;
if($check > 0) {
while($row = $query->fetch_assoc()) {
$uid = $row['uid'];
$hash = $row['password'];
}
if(verifyPassword($password, $hash) == true) {
UpdateSession($uid);
return true;
} else
return false;
} else
return false;
}
function register_account($firstname, $lastname, $gender, $email, $username, $password) {
global $mysql;
//If email is not in correct format e.g [email protected]
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
return "Vääränlainen sähköpostiosoite!";
}
//If email exists in the database
if(email_exists($email) == true) {
return "Sähköposti on jo rekisteröity!";
}
//If username exists in the database
if(username_exists($username) == true) {
return "Käyttäjänimi on jo rekisteröity!";
}
$date = date("Y-m-d H:m:s");
//Create a row into table_users
$mysql->query("INSERT INTO table_users (username, password, email, fullname, gender, level, avatar, admin_access, views, date_registered) VALUES ('$username', '".hashPassword($password)."', '$email', '$firstname $lastname', '$gender', 0, 'default.png', 0, 0, '$date') ");
return "Käyttäjätilisi on nyt rekisteröity!";
}
function email_exists($email) {
global $mysql;
$query = $mysql->query("SELECT * FROM table_users WHERE email = '$email'");
$check = $query->num_rows;
if($check > 0)
return true;
return false;
}
function username_exists($username) {
global $mysql;
$query = $mysql->query("SELECT * FROM table_users WHERE username = '$username'");
$check = $query->num_rows;
if($check > 0)
return true;
return false;
}
function hashPassword($password) {
return password_hash($password, PASSWORD_BCRYPT, [ 'cost' => 15 ]);
}
function verifyPassword($password, $hash) {
if (password_verify($password, $hash))
return true;
else
return false;
}
function UpdateSession($uid) {
global $mysql;
$sessionkey = base64_encode(randomString(35));
$_SESSION['sessionkey'] = $sessionkey;
$query = $mysql->query("UPDATE table_users SET sessionkey = '$sessionkey' WHERE uid = '$uid'");
}
function sessionkey_check($sessionkey) {
global $mysql;
$query = $mysql->query("SELECT * FROM table_users WHERE sessionkey = '$sessionkey'");
if($query->num_rows > 0)
return true;
return false;
}
?>
不断收到消息,“它看起来像你的帖子主要是代码,请添加更多的细节。“,我真的不知道要添加什么。
答
使用$ inseted_id = $ mysqli-> insert_id可以获得插入的ID和您以前拥有的所有其他信息。现在创建用户SESSION和标题位置更改
应用程序的其余部分如何知道某人是否已登录?什么会话变量被设置?你需要模仿。 – waterloomatt
你没有向我们展示所有相关的代码。到目前为止,我看到一位创建会话,另一位创建数据库中的用户。既然你没有向我们展示(或者你没有?)你的登录代码,我们不知道为什么它没有这样做。但是 - 很明显,您不会从您的create-user-method调用*任何登录方法。也许你应该尝试一下。 – Antares42