会话跟踪技术之COOKIE
会话跟踪技术之COOKIE
一、为什么要用会话控制
我们需要我们的站点可以跟踪客户端与服务器之间的交互,保存和记忆每个用户的身份和信息。
几个疑问
- 我先访问A页面后访问B页面,HTTP无法知道是不是同一个人访问
- 为什么京东它知道我曾经浏览过哪些商品
- 为什么别人可以看到我的网页浏览记录
二、会话跟踪技术
1、使用隐藏表单域
<input type="hidden" name="checkid" value="AK47">
2、借助URL参数
原始URL:http://www.aipanshi.com/show.php
用添加的参数重写的URL:
http://www.aipanshi.com/show.php?id=1002
原始URL:http://www.aipanshi.com/userinfo.php
用添加的参数重写的URL:
http://www.aipanshi.com/userinfo.php?uid=1000
3、Cookie
4、Session
三、会话跟踪技术之COOKIE
1、什么是cookie(小甜品)
- cookie 是HTTP协议下,服务器或脚本可以维护客户信息的一种方式
- 用户在浏览器上的一个很小的文本文件。【常用来记忆 用户名、密码、个性化设置、个人偏好记录等等】
- cookie 保存在客户端(用户浏览器),可以手动删除。如果浏览器上的cookie太多,超过了系统所允许的范围,浏览器会自动删除。
2、cookie的工作原理
存储cookie是浏览器提供的功能。cookie 其实是存储在浏览器中的纯文本,浏览器的安装目录下会专门有一个 cookie 文件夹来存放各个域下设置的cookie
当浏览器不禁用cookies的时候,浏览器每一次的WEB请求,都会自动读取cookies数据发送给服务器。
另一种说法:cookies是服务器保存在客户端上的数据,用来标识用户.
3、生成一个cookie
- 3.1 通过setcookie()函数
setcookie('名字','值','有效期','路径','域名','是否安全');
名字: 取的名字(必须)
值: 存的什么(必须)
有效期: 在多长时间内可以访问(必须),默认浏览器关闭即失效
路径: 可以进哪个文件夹 默认是当前访问的文件夹 注意'/'是根目录
域名: 相当于区域
安全: 默认是false如果是使用https协议,就将这一项改为true例子
# 默认创建cookie在浏览器关闭后失效 setcookie('name','jack');q # 有效时间1个小时 setcookie("english-name",'Jack',time()+3600); # 在目录session下创建cookie默认的作用域是/session,非/session目录访问不了 setcookie("english-name",'Jack',time()+3600,'/');
//有效时间1个小时,整个域名下有效,一级域名下有效
setcookie("english-name-test",'Jack-test',time()+3600,'/','study.com');
//数组方式
setcookie('name[0]','jack');
setcookie('name[1]','jack100');
// 也可以先序列化再存储
$arr = ['jack','jack2'];
setcookie('arr-name',serialize($arr)); - 3.1 通过header()函数
header("Set-Cookie:course=PHP;path=/;");
4、访问cookie
var_dump($_COOKIE["cookiename"]);
5、删除一个cookie
# 第一种方法
setcookie("cookieName","Value",time()-1);
# 第二种方法
setcookie("cookieName");
5、cookie存放位置
# chrome
C:\Documents and Settings\Administrator\Local Settings\Application Data\Google\Chrome\User Data\Default
下面有个cookie文件,有时候找不到对用的文件夹,可能是系统默认隐藏
# Firefox
C:\Users\Administrator\AppData\Local\Mozilla\Firefox\Profiles\pmfhbcqs.default\OfflineCache
每个浏览器都有自己的cookies文件,每个浏览器也只能读写自己的cookies数据,并且具体的读写处理也不一样。 举个例子,chrome的所有cookies数据是存放在一个文件中的,并且做了加密处理,所以chrome写cookies时会加密,读cookies会解密,如果你用文本处理工具打开chorme的cookies会发现乱码看不懂,就是因为chrome加密了不让你看,只有它自己懂
6、cookie注意事项
setcookie()函数之前不能有任何html输出,空白都不行。同header()- 通过
setcookie()函数生成cookie,打印$_COOKIE['name'],不能获取对应的值.必须刷新或在其他页面获取。 - 不同浏览器对cookie处理不同。客户端可以禁用cookie,浏览器也会限制cookie的数量。
一个浏览器能创建的cookie数量最多为300个,并且每个不能超过4KB,每个WEB站点能设置的cookie总数不能超过20个
- cookie是保存在客户端。用户可以禁用或删除,所以不能过分依赖cookie。
- 不要使用过多,影响网站性能(文件读写)
四、COOKIE数据的加密
<?php
function str_auth($string, $operation = 'ENCODE', $key = '', $expiry = 0) {
$ckey_length = 4;
$key = md5($key!=''?$key:'www_uxuew_cn'); //加密秘钥
$keya = md5(substr($key, 0, 16));
$keyb = md5(substr($key, 16, 16));
$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
$cryptkey = $keya.md5($keya.$keyc);
$key_length = strlen($cryptkey);
$string = $operation == 'DECODE' ? base64_decode(strtr(substr($string, $ckey_length), '-_', '+/')) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
$string_length = strlen($string);
$result = '';
$box = range(0, 255);
$rndkey = array();
for($i = 0; $i <= 255; $i++) {
$rndkey[$i] = ord($cryptkey[$i % $key_length]);
}
for($j = $i = 0; $i < 256; $i++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}
for($a = $j = $i = 0; $i < $string_length; $i++) {
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;
$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp;
$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
}
if($operation == 'DECODE') {
if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
return substr($result, 26);
} else {
return '';
}
} else {
return $keyc.rtrim(strtr(base64_encode($result), '+/', '-_'), '=');
}
}
var_dump(str_auth('jack'));
$string = '0494_qUPiWkv2NluPFEHdqqlimykBHNmnsXd9oTFultD';
var_dump(str_auth($string,'DECODE'));
?>
会话跟踪技术之COOKIE的更多相关文章
- JSP基础--会话跟踪技术、cookie、session
会话跟踪技术 1 什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10 ...
- (九)会话跟踪技术之Cookie
--部分摘自孤傲苍狼博客~ 一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再 ...
- 会话跟踪技术之——cookie
1.cookieForm <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- 简述会话跟踪技术——Cookie和Session
简述会话跟踪技术--Cookie和Session 本篇文章将会简单介绍Cookie和Session的概念和用法 会话跟踪技术 首先我们需要搞清楚会话和会话跟踪的概念: 会话:用户打开浏览器,访问Web ...
- Cookie&Session会话跟踪技术
今日内容学习目标 可以响应给浏览器Cookie信息[response.addCookie()] 可以接受浏览器Cookie信息[request.getCookies()] [创建cookie,设置pa ...
- cookie和session的区别与会话跟踪技术
会话跟踪技术: HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的.非连续的.当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟 ...
- JavaEE基础(04):会话跟踪技术,Session和Cookie详解
本文源码:GitHub·点这里 || GitEE·点这里 一.会话跟踪 1.场景描述 比如登录某个购物网站,身份识别成功后,在网站下单,支付 等操作,这些操作中当前登录用户信息必须是共享的,这样这些操 ...
- 会话跟踪技术 - Cookie 和 Session 快速上手 + 登陆注册案例
目录 1. 会话跟踪技术概述 2. Cookie 2.1 Cookie的概念和工作流程 2.2 Cookie的基本使用 2.3 Cookie的原理分析 2.4 Cookie的使用细节 2.4.1 Co ...
- Servlet之会话(Session)以及会话追踪技术(Cookie),(URL重写)和(隐藏表单域)
Session 什么是会话? 会话: Web应用中的会话 指的是一个客户端浏览器与Web服务器之间连续发生的一系列请求和响应的过程 会话状态: Web服务器和浏览器在会话的过程中产生的状态信息 作用: ...
- Django - cookies 会话跟踪技术
一.HTTP协议的无状态保存 两次请求之间没有关联 会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应 2.会话路径技术使用Cookie或session完成 我们知道HTTP ...
随机推荐
- <vue 组件 2、组件参数传递>
代码结构 一. 01-父组件向子组件传递数据 1. 效果 展示出来的数据都是父组件传给子组件的数据 2.代码 01-父组件向子组件传递数据.html <!DOCTYPE html> ...
- 深度学习(六)——神经网络的基本骨架:nn.Module的使用
一.torch.nn简介 官网地址: torch.nn - PyTorch 2.0 documentation 1. torch.nn中的函数简介 Containers:神经网络的骨架 Convolu ...
- linux chown 与 chmod 命令的使用
本文为博主原创,未经允许不得转载: 最近在做 linux 系统安全管理检查操作,频繁的用到了 chown 与 chmod 两个命令,觉得有必要对着两个命令总结一下. 一. chown 命令: 1. 设 ...
- SV 设计特性
过程语句块特性 ABC 过程块语句 always_comb 防止多驱动的问题:赋值块左侧的语句无法被另一个过程块赋值 if语句没有写else,sv会提示警告,sv认为是latch always不会再仿 ...
- 小技巧:WIndows快速创建文件夹
快速创建文件夹的技巧 1.首先创建文本文档将扩展名更改为.bt,mkdir.bat 2.写入创建文件夹的代码 md 文件夹1 文件夹2 文件夹3 pause 3.双击执行mkdir.bat
- 【SHELL】命令补全
# 指定文件 dodo_path=/home/skull/work/scripts/dodo echo "hello skull" ## COMP_WORDS 是一个 bash 内 ...
- 【转】获取本地图片的URL
在写博客插入图片时,许多时候需要提供图片的url地址.作为菜鸡的我,自然是一脸懵逼.那么什么是所谓的url地址呢?又该如何获取图片的url地址呢? 首先来看一下度娘对url地址的解释:url是 ...
- Laravel - 解决 $.ajax success 返回的数据为空的问题 (后台为laravel)
原因之一 : 后台 dump()打印 , 去掉或者注释就好了
- C# 线程本地存储 为什么线程间值不一样
一:背景 1. 讲故事 有朋友在微信里面问我,为什么用 ThreadStatic 标记的字段,只有第一个线程拿到了初始值,其他线程都是默认值,让我能不能帮他解答一下,尼玛,我也不是神仙什么都懂,既然问 ...
- [转帖]备份与恢复工具 BR 简介
https://docs.pingcap.com/zh/tidb/v4.0/backup-and-restore-tool BR 全称为 Backup & Restore,是 TiDB 分布式 ...