您的位置:首页 > 编程语言 > PHP开发

php中的session cookie 记住密码基本原理 浏览器退出登录后保持状态

2015-03-26 18:49 639 查看
1.sql语句:

create database demo;

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`username` varchar(255) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('123', '1', '123');

2.配置文件config.php
<?php
header('Content-Type:text/html;charset=utf-8');
define('dbhost','localhost');
define('dbuser','root');
define('dbpassword','root');
define('dbname','demo');


3.登录页面 login.php
<?php

require('config.php');

session_start();

if(!isset($_SESSION['user_id'])){

if(isset($_POST['submit']) && !empty($_POST['username'])&&!empty($_POST['password'])){

$dbc=mysqli_connect(dbhost,dbuser,dbpassword,dbname);
$user_username=$_POST['username'];
$user_password=$_POST['password'];

if(!empty($user_username)&&!empty($user_password)){
$query = "SELECT user_id, username FROM user WHERE username = '$user_username' AND "."password = ('$user_password')";
$data = mysqli_query($dbc,$query);
//用用户名和密码进行查询,若查到的记录正好为一条,则设置SESSION和COOKIE,同时进行页面重定向
if(mysqli_num_rows($data)==1){
$row = mysqli_fetch_array($data);
$_SESSION['user_id']=$row['user_id'];
$_SESSION['username']=$row['username'];
setcookie('user_id',$row['user_id'],time()+(60*60*24*30));
setcookie('username',$row['username'],time()+(60*60*24*30));
<span style="white-space:pre">		</span>// 以下设置是没有效果的
//  setcookie("user_id",$_COOKIE['user_id'], time()+600);
// setcookie("username",$_COOKIE['username'], time()+600);
$home_url = 'loged.php';
header('Location: '.$home_url);
}else{//若查到的记录不对,则设置错误信息
$error_msg = '用户名密码错误,重试';

}

}
}else{
$error_msg = '请填写用户名和密码';

}
}else{//如果用户已经登录,则直接跳转到已经登录页面

$home_url = 'loged.php';
header('Location: '.$home_url);
}
?>
<html>
<head>
<title>登录</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<h3>登录</h3>
<!--通过$_SESSION['user_id']进行判断,如果用户未登录,则显示登录表单,让用户输入用户名和密码-->
<?php
if(!isset($_SESSION['user_id'])){
echo '<p class="error">'.$error_msg.'</p>';
?>
<!-- $_SERVER['PHP_SELF']代表用户提交表单时,调用自身php文件 -->
<form method = "post" action="<?php echo $_SERVER['PHP_SELF'];?>">
<fieldset>
<legend>Log In</legend>

<label for="username">Username:</label>
<input type="text" id="username" name="username"
value="<?php //if(!empty($user_username)) echo $user_username; ?>" />

<br/>

<label for="password">Password:</label>
<input type="password" id="password" name="password"/>

</fieldset>
<input type="submit" value="Log In" name="submit"/>
</form>
<?php
}
?>
</body>
</html>

<?php
echo '<hr>';
var_dump($_COOKIE);
echo '<hr>';
var_dump($_SESSION);
?>
4.登录状态显示页面(登陆后)loged.php
<?php
header('Content-Type:text/html;charset=utf-8');
//使用会话内存储的变量值之前必须先开启会话
session_start();
// var_dump($_SESSION);
// var_dump($_COOKIE);
//如果会话没有被设置,查看是否设置了cookie
if(!isset($_SESSION['user_id'])){
if(isset($_COOKIE['user_id'])&&isset($_COOKIE['username'])){
//用cookie给session赋值
$_SESSION['user_id']=$_COOKIE['user_id'];
$_SESSION['username']=$_COOKIE['username'];

}
}
//使用一个会话变量检查登录状态
if(isset($_SESSION['username'])){
echo '你好 '.$_SESSION['username'].'<br/>';
echo '<a href="logout.php"> 登出('.$_SESSION['username'].')</a>';
}else{

$home_url='login.php';
header('Location:'.$home_url);
}
echo '<hr>';
var_dump($_COOKIE);
echo '<hr>';
var_dump($_SESSION);
/**在已登录页面中,可以利用用户的session如$_SESSION['username']、
* $_SESSION['user_id']对数据库进行查询,可以做好多好多事情*/
?>

5.登出页面 logout.php
<?php
header('Content-Type:text/html;charset=utf-8');
session_start();
if(isset($_SESSION['user_id'])){
$_SESSION=array();
if(isset($_COOKIE[session_name()])){
setcookie(session_name(),'',time()-3600);
}
session_destroy();
}

setcookie('user_id','',time()-3600);
setcookie('username','',time()-3600);
$home_url='login.php';
echo '退出成功';
header('Location:'.$home_url);

如果浏览器设置了关闭浏览器时,清除cookie,以上代码就会失效。再看看有乜嘢其他办法?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息