会话跟踪技术之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 ...
随机推荐
- Educational Codeforces Round 99 (Rated for Div. 2) (A ~ F)个人题解
Educational Codeforces Round 99 (Rated for Div. 2) A. Strange Functions 读懂题即可(或者快速看一下样例解释),直接输出字符串长度 ...
- VScode 中 Code Runner 插件乱码问题
安装好,Code Runner 插件,可以很方便的运行多种语言的文本,但是提示和输出经常会报错 进入 File - > Preference -> setting, 然后在输入框搜索 se ...
- java进阶(24)--ArrayList集合、LinkList集合、Vector集合
一.基础 1.ArrayList集合底层是Object[]数组 2.默认容量10(优先:Add第一个元素,初始化未0,jdk13) 3.构造方法:无参(默认).有参 4.ArrayList集合扩容比例 ...
- Go 语言中 defer 使用时有哪些陷阱?
大家好,我是 frank ,「 Golang 语言开发栈」公众号作者. 01 介绍 defer 的使用方式是在其后紧跟一个函数调用或方法调用,确保在其所在的函数体返回之前执行其调用的函数或方法. 在 ...
- python · ssh · SQL | python 连接远程 SQL 数据库
python 连接本地 SQL 的 教程存档. 如果要连接远程的 SQL 数据库,需要先开一个 ssh 连接,在 ssh 连接里写 pymysql 的 connect 代码. 代码如下: ''' pi ...
- pmp考试巩固知识点
1.冲刺评审会是需要相关的干系人参加的,在冲刺评审会上干系人可以审查并澄清角色.责任和管理模式2.采购中的争议,往往找合同和SOW,SOW是对需要采购的详细范围的描述,与供应商在可交付成果方面有争议时 ...
- 你不知道的JavaScript APIs
前言 在本文中,将介绍一些鲜为人知但却非常有用的API,如: Page Visibility API Web Share API Broadcast Channel API International ...
- JAVA - 文件切分存储 - FileInputStream 流形式
package stream; import java.io.*; /** * @author*/ public class TestStream { public static void main( ...
- 鲲鹏920上面 Docker 部署 clickhouse 的方式方法
鲲鹏920上面 Docker 部署 clickhouse 的方式方法 背景 最近有一套鲲鹏920的测试环境, 研发同事想纯Dcoker部署一套环境. 其中就包括了 Clickhouse 之前发现Cli ...
- 一键部署Docker中间件简单方法-redis为例
一键部署Docker中间件简单方法-redis为例 背景 想能够快速部署一些中间件. 写文档虽然可以, 但是总会有人问, 能够一键部署应该最好不过. 下载以及导出镜像 docker pull redi ...