ezeke 发表于 2017-3-28 11:37:19

php基础知识(4)-cookie使用

php基础知识-cookie使用
示例代码下载页http://xieye.iteye.com/blog/1336095(在附件)
cookie简单定义:浏览器发送请求给服务器时额外传送的数据。
cookie原理:web协议规定,服务器返回请求时可以将一小部分数据存在浏览器客户端,浏览器在下次往同域名服务器请求信息时,会
同时自动把该段信息再发送给服务器,而这一切是对用户透明的,用户不需要理解这些东西可以照常上网。
cookie的一个特点是,服务器存客户端时可以带有时间参数,浏览器会根据这个参数决定cookie是否过期来处理,如果过期了,这个cookie就
不会到服务端。
假如服务端不对cookie做处理,则每次浏览器发送请求到服务端总会自动传送相同内容的cookie。
cookie的另一个特点是多个名称和值的组合。
例子:自动登录。
有3个页面,一个首页,一个是登录页
必须先添加一个用户
insert into test.member(username,password)values('admin', md5('1') );
9.php,10.php,11quit.php 是没有自动登录的例子。
19.php,20.php,21quit.php 是自动登录的例子。
演示
首先是一个普通的登录例子
http://localhost/command/peixun/cookie/9.php,提示登录
进入10.php,输入admin,1则跳转到9.php,显示出当前用户名,如果愿意可以退出。
如果没有点击“退出”按钮,则直接关闭浏览器,再打开浏览器输入http://localhost/command/peixun/cookie/9.php,发现并没有处于登录状态。

然后是一个通过cookie的自动登录例子。
http://localhost/command/peixun/cookie/19.php,提示登录
进入10.php发现多了一个复选框,不勾选的情况下和上面的例子效果完全一样,输入admin,1则跳转到19.php,显示出当前用户名,如果愿意可以退出。
如果勾选后输入admin,1则跳转到19.php,此时不能点击“退出”链接,直接关闭浏览器。
双击桌面的浏览器图标再次打开浏览器,发现处于已登录状态,这就是cookie的效果。
重要说明:本例子只用于演示cookie的用法,实际应用中为安全起见,最好隐藏cooikie的字段含义,程序也因此需要做修改。
代码可下载,只显示第2个例子的代码
19.php

<?php
//会话的第2个例子,首页
//9.php,简单例子,首页
//10.php,简单例子,登录页
//11quit.php,简单例子,退出页
//19.php,   复杂例子,首页
//20.php,    复杂例子,登录页
//21quit.php, 复杂例子,退出页
require_once('../Public/CommandLine.php');
session_start();
//逻辑是如果未登录,则显示“请登录”,如果已登录,显示欢迎某某某
$html = '';
if (isset($_SESSION['islogin']) &&$_SESSION['islogin'] == 1) { //已登录
$html .= '欢迎您,' . $_SESSION['username'] .
"&nbsp;&nbsp;&nbsp;&nbsp;<a href='11quit.php'>退出</a>";
} else { //未登录分:有cookie的记住我,且为1
if (isset($_COOKIE['rememberme']) &&$_COOKIE['rememberme']==1 ) {
$username = strval($_COOKIE['username']);
$password = strval($_COOKIE['password']);
$db = Sys::getdb();
$select = $db->select();
$select->from('test.member', 'count(*)'   )
->where('username=?', $username)
->where('password=?', $password);
$result = $db->fetchOne($select);
if ($result) { //如果是对的
$_SESSION['islogin'] = 1;
$_SESSION['username'] = $username;
$html .= '欢迎您,' . $_SESSION['username'] .
"&nbsp;&nbsp;&nbsp;&nbsp;<a href='21quit.php'>退出</a>";
}
}
}
if(!( isset($_SESSION['islogin']) &&$_SESSION['islogin'] == 1 ) ){
$html .= '<a href="20.php">请登录</a>';
}
$html .= "<br><h1>这是首页<h1>";
echo $html;


20.php

<?php
//自动登录的登录页
require_once('../Public/CommandLine.php');
session_start();
$isget = ($_SERVER['REQUEST_METHOD'] == 'GET') ? 1 : 0;
if ($isget) {
$html = <<<longs
<html>   
<body>
<form method="post">
请输入用户名:<input type="text" name="username" value=''><br>
请输入密码:<input type="text" name="password" value=''><br>
<input type="checkbox" name="rememberme" value="1" />下次自动登录<br>
<input type="submit" value="登录" >
</form>
</body>
</html>
longs;
echo $html;
} else {
//echo $_POST['name1'];
$username = $_POST['username'];
$password= $_POST['password'];
$db = Sys::getdb();
$select = $db->select();
$select->from('test.member', 'count(*)'   )
->where('username=?', $username)
->where('password=?', md5($password));
$result = $db->fetchOne($select);
if ($result) {
$_SESSION['islogin'] = 1;
$_SESSION['username'] = $username;

$time = time() + 3600 * 24 * 365;
setcookie('rememberme', intval($_POST['rememberme']), $time, "/");
setcookie('password',md5($password), $time, "/");
setcookie('username',$username, $time, "/");
header('Location: 19.php');
}else {
$html = <<<longs
<html>   
<body>
请输入正确的用户名和密码
<form method="post">
请输入用户名:<input type="text" name="username" value='{$username}'><br>
请输入密码:<input type="text" name="password" value='{$password}'><br>
<input type="checkbox" name="rememberme" value="1" />下次自动登录<br>
<input type="submit" value="登录" >
</form>
</body>
</html>
longs;
echo $html;
}
}


21quit.php

<?php
//第2个例子,自动登录的退出页
require_once('../Public/CommandLine.php');
session_start();
$_SESSION['islogin'] =0;
$date = time() - 3600 * 24 * 365;
foreach($_COOKIE as $key => $ko){
if ($key != 'PHPSESSID') {
setcookie($key, "", $date, "/"); //删除cookie的写法
}
}
header('Location: 19.php');
页: [1]
查看完整版本: php基础知识(4)-cookie使用