设为首页 收藏本站
查看: 325|回复: 0

[经验分享] php基础知识(4)-cookie使用

[复制链接]

尚未签到

发表于 2017-3-28 11:37:19 | 显示全部楼层 |阅读模式
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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-356416-1-1.html 上篇帖子: asp没有php好么? 下篇帖子: php-fpm中的进程管理方式优化
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表