博客列表 >【8/31】--cookie与session的登录个人信息保存机制,cookie与session机制的不同优劣

【8/31】--cookie与session的登录个人信息保存机制,cookie与session机制的不同优劣

花弄的博客
花弄的博客原创
2018年09月05日 10:02:44914浏览

实例

<div id = "header">
		<h1><a href="index.php"></a></h1>	
		<ul> 
			<li><a style="text-decoration:none" href="index.php">首页</a></li>
			<?php
				if(isset($_COOKIE['name']))
				{
					echo '<li><a href = "#">'.$_COOKIE['name'].' · 个人中心</a> '.'</li>';
					echo '<li><a href = "loginout.php">退出</a></li>';
				}else
				{
					echo "\n";
					echo "\t\t";
					echo '<li><a href = "login.php">登录</a></li>';
					echo "\n";
				}
			?>		
			
		</ul>
</div>

运行实例 »

点击 "运行实例" 按钮查看在线实例

这里是头部代码:运行后预览图如下:主要是html代码和css
header.jpg


接下来是整个登录页面的代码,php脚本和html结合的代码:因为是引用的本地的代码,,,所以看不出效果,我把引用的代码直接注释了,因为主要是html的界面,

实例

<?php 
	$page_title = '用户登录';
	//数据库连接
 	//require 'include/dbconn.inc.php';
 	//加载函数库
 	//require 'include/func.inc.php';
 

 	//处理提交的数据
    if (isset($_GET['action']) && $_GET['action'] == 'login') {
    	//验证登录
  		$data = _check_login($pdo,$_POST['username'],$_POST['password']);
    	//设置cookie
    	setcookie('id',$data['id']);
    	setcookie('name',$data['username']);
    	_setcookies($data['username'],$_POST['time']);
    	echo "<script type='text/javascript'>alert('登录成功');location.href='index.php';</script>";
		exit();
    }
?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>登录</title>
</head>
<body>
	<h2 style="color: lightblue">用户登录</h2>
	<form action="?action=login" method="post">
		<dl>
				<dt></dt>
				<dd><font style="letter-spacing: 0.5em;margin-right: -0.5em;">用户名</font>:<input style="border-radius: 5px; width: 180px" type="text" name="username" class="text" size="10px" /></dd>
				<dd><font style="letter-spacing: 2em;margin-right: -2em;">密码</font>:<input style="border-radius: 5px; width: 180px"" type="password" name="password" class="text" /></dd>
				<dd><font style="letter-spacing: 2em;margin-right: -2em;">保留</font>:
					<input type="radio" name="time" value = "0" checked = "checked" />不保留 
					<input type="radio" name="time" value="1" />一天 
					<input type="radio" name="time" value="2" />一周 
				</dd>
				<?php if(!empty($_sys['code'])){ ?>
				<dd><font style="letter-spacing: 0.5em;margin-right: -0.5em;">验证码</font>:<input style="border-radius: 5px;" type="text" name="code" class = "text code" /> 
					<img src="code.php" onclick="javascript:this.src='code.php?tm='+Math.random()" id = "code" /></dd>
					<?php } ?>
				<dd>  
					<input style="border-radius: 5px;width: 45px;color: #3B3B3B;"  onmouseover="this.style.backgroundColor='#CCCCCC'"onmouseout="this.style.backgroundColor='';" type="submit" value = "登录" class="button" />
			
					<input style="border-radius: 5px;width: 45px;color: #3B3B3B;" onmouseover="this.style.backgroundColor='#CCCCCC'"onmouseout="this.style.backgroundColor='';" type="button"  value="注册" id = "location" class="button location" onclick="window.location.href='#'" />
				
				</dd>
			</dl>
	</form>
	<?php //include 'include/footer.inc.php' ?>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

做了cookie的过期时间的处理:这几天作业和工作堆积成山,css实在没空调了...

login.jpg



下面是登录成功后效果,我选择了一天的cookie过期时间:

loginok.jpg

因为是我本地的数据库,所以是没有办法显示登录效果的,所以这里只能是我这边的图了,登录之后的处理就上引用下面的核心数据处理代码的:

下面是核心函数库的代码:主要是用来验证登录的信息以及数据库验证数据的合法性

<?php


//登录验证

function _check_login($pdo,$username,$password)

{

//出师一个数组保存错误信息

$error = [];

//非空验证--用户名

if(empty($username))

{

$error[] = '用户名不能为空';

}else

{

// $username = PDO::quote(trim($username));

$username = trim($username);

}

//非空验证--密码

if(empty($password))

{

$error[] = '密码不能为空';

}

else

{

$password = sha1(trim($password));

}


//数据库验证

if(empty($error))

{

//预处理sql

$stmt = $pdo ->prepare("select id,username from user where username=:username and password=:password");

//执行

$stmt ->execute(array(":username"=>"$username",":password" =>"$password"));

$userdata = [];

$stmt -> bindColumn('id',$userdata['id']);

$stmt -> bindColumn('username',$userdata['username']);

if($stmt -> fetch(PDO::FETCH_BOUND)){

return $userdata;

}

else

{


$error[] = '邮箱或密码不正确,请从新输入';

}

return $error;

}


}


//cookie时间

function _setcookies($_username,$_time)

{

switch ($_time) {

//不保存密码

case '0': //浏览器进程

# code...

setcookie('name',$_username);

break;

//保存1天

case '1':

# code...

setcookie('name',$_username,time()+86400);


break;

//保存一周

case '2':

# code...

setcookie('name',$_username,time() + 604800);

break;

//保存一月

case '3':

setcookie('name',$_username,time() + 2592000);


break;

}

}



以上是cookie登录的案例,下面的是session的机制,html和css的代码都是一样的,主要在于设置的方式,cookie 是 setcookie(),session是$_SESSION[],cookie是可以设置过期时间的也是很方便的,session虽然也可以,但是很麻烦,需要该配置文件,在程序中还需要调用一个setMaxInactiveInterval的方法.而且不直观.一般都是会话结束后session自动销毁,是基于服务器端的,因此加载时也会造成一定的效率问题,cookie因为是浏览器端的,所以效率问题就会小非常多,但相对的,浏览器端的环境无人得知,安全性就是一个很大的问题.所以,追求效率的话用cookie,追求安全用session,当然,没有绝对性,一般都是相互结合使用.下面上一个session登录的吧

实例

<?php 
	$page_title = '用户登录';
	//数据库连接
 //	require 'include/dbconn.inc.php';
 	//加载函数库
 //	require 'include/func.inc.php';
 

 	//处理提交的数据
    if (isset($_GET['action']) && $_GET['action'] == 'login') {
    	//验证登录
  		$data = _check_login($pdo,$_POST['username'],$_POST['password']);
    	//设置session
    	$_SESSION['id'] = $data['id'];
    	$_SESSION['name'] = $data['username'];

    
    	echo "<script type='text/javascript'>alert('登录成功');location.href='index.php';</script>";
		exit();
    }
?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>登录</title>
</head>
<body>
	<h2 style="color: lightblue">用户登录</h2>
	<form action="?action=login" method="post">
		<dl>
				<dt></dt>
				<dd><font style="letter-spacing: 0.5em;margin-right: -0.5em;">用户名</font>:<input style="border-radius: 5px; width: 180px" type="text" name="username" class="text" size="10px" /></dd>
				<dd><font style="letter-spacing: 2em;margin-right: -2em;">密码</font>:<input style="border-radius: 5px; width: 180px"" type="password" name="password" class="text" /></dd>
				
				<?php if(!empty($_sys['code'])){ ?>
				<dd><font style="letter-spacing: 0.5em;margin-right: -0.5em;">验证码</font>:<input style="border-radius: 5px;" type="text" name="code" class = "text code" /> 
					<img src="code.php" onclick="javascript:this.src='code.php?tm='+Math.random()" id = "code" /></dd>
					<?php } ?>
				<dd>  
					<input style="border-radius: 5px;width: 45px;color: #3B3B3B;"  onmouseover="this.style.backgroundColor='#CCCCCC'"onmouseout="this.style.backgroundColor='';" type="submit" value = "登录" class="button" />
			
					<input style="border-radius: 5px;width: 45px;color: #3B3B3B;" onmouseover="this.style.backgroundColor='#CCCCCC'"onmouseout="this.style.backgroundColor='';" type="button"  value="注册" id = "location" class="button location" onclick="window.location.href='#'" />
				
				</dd>
			</dl>
	</form>
	<?php //include 'include/footer.inc.php' ?>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

实际页面是一样,登陆后的效果也是一样的,只不过session是在服务器端的:

session.jpg


session在会话结束后会自动销毁,一般来说,对于使用者的安全性信息建议是用session,页面跳转以及分页的一些信息可以结合cookie来使用


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议