我正在用一个简单的管理会话功能(比如facebook)制作一个登录脚本
首先,我创建了一个名为 "users_sessions"
代码如下:
$database->query("
CREATE TABLE `users_sessions` (
`session_id` int(10) UNSIGNED NOT NULL,
`session_date` datetime NOT NULL,
`user_id` int(10) UNSIGNED NOT NULL,
`user_browser` varchar(64) COLLATE utf8mb4_bin NOT NULL,
`user_os` varchar(64) COLLATE utf8mb4_bin NOT NULL,
`user_ip` varchar(64) COLLATE utf8mb4_bin NOT NULL,
PRIMARY KEY (`session_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
");
所以我想做的是,当用户自动填写正确的用户名和密码时,脚本会在这个表中插入正确的成功用户日志信息。
这是index.php:
$_POST['password'] = User::hash_password($_POST['password']);
if(!empty($_POST) && empty($_SESSION['error'])) {
/* If remember me is checked, log the user with cookies for 30 days else, remember just with a session */
if(isset($_POST['rememberme'])) {
setcookie('username', $_POST['username'], time()+60*60*24*30);
setcookie('password', $_POST['password'], time()+60*60*24*30);
setcookie('user_id', User::login($_POST['username'], $_POST['password']), time()+60*60*24*30);
} else {
$_SESSION['user_id'] = User::login($_POST['username'], $_POST['password']);
}
redirect();
}
这是我的数据库配置:
<?php
/* CONNECTION */
$database_connection = new StdClass();
$database_connection->server = 'localhost';
$database_connection->username = 'root';
$database_connection->password = '';
$database_connection->name = 'wearesocio';
$database = new mysqli($database_connection->server, $database_connection->username, $database_connection->password, $database_connection->name);
if($database->connect_error) {
header('Location: '.$_SERVER['PHP_URL']."install");
}
/* DB CLASS */
Database::$database = $database;
/* DEBUGGING */
define('DEBUGGING', true);
?>
3条答案
按热度按时间yduiuuwa1#
在理想的情况下,我会在insert函数中使用带绑定参数的pdo,设置每个表的主键,并清除用户输入。当然,在存储密码之前要根据如何使用密码进行散列
更新
aiazj4mn2#
这是我的解决方案
我创建了一些获取用户浏览器或用户ip等的函数,然后在下面创建这个函数,将其添加到
$_SESSION['user_id']
```function insert_into_users_sessions($user_id){
// here add your database class name
global $database;
}
cld4siwp3#
例如,可以将其添加到login()方法的末尾