Cookie和Session

本文详细介绍了HTTP协议中用于保持客户端与服务器会话状态的技术,包括Cookie和Session的工作原理、存储方式、安全性考虑及实现机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Cookie是远程浏览器端存储数据并用于跟踪和识别用户的机制。从实现上说Cookie是存储在客户端上的一小段数据,客户端通过HTTP协议和服务端进行Cookie交互。

Cookie独立于语言的存在,并不由哪种编程语言实现的,而这些语言则是实现对Cookie的间接操作(发送HHTTP指令,浏览器收到指令操作Cookie并返回给服务器),因此Cookie是由浏览器实现和管理的

Cookie没有显式的删除函数,如果想删除Cookie,应该将Cookie的expire设置为过期时间。


PHP语言的setcookie()等函数必须在输出数据之前调用,和header()函数相同,不然会报错。

原因:Cookie是HTTP头的一部分,即先发送或请求Cookie,然后才有data域。


每个域名下面cookie个数是有限制的,IE 50个 FF 150个 ,超过直接删除旧的。


Cookie虽然带来好的用户体验,但是不能滥用,会增加带宽:一旦cookie被设置在域下,则请求该域名下的一个资源,浏览器和服务器之间都可能存在cookie的上行和下行流量。


Cookie的存储位置:

1、浏览器内存中(没设置过期时间)

2、每个域名下一个文本文件

3、FF存在对应目录下的sqllite文件中

关闭浏览器Cookie并不会随之消失,除非设置该cookie的过期时间为空。


cookie跨域-单点登录SSO(CSA)


本地存储localStorage:

使用本地localStorage的原因:

1、由于每个域名下的每个Cookie最多存储4KB

2、数据不可靠永远无法知道是不是自己把数据堵满了还是别人把你的数据改了

3、还有就是每次HTTP请求都会把Cookie带上造成流量浪费。

注意点:HTML5本地存储只能存字符串,任何格式存储的时候都会被自动转为字符串,所以读取的时候需要自己进行类型转换。

新特性:HTML5除了基本的读写操作外,还提供了storage事件对键值对的改变进行监听。


SESSION详解:

Session即会话,指一种持续的、双向的连接。

Session实现方式有:1、URL重新 2、Cookie 3、通过在Cookie中存储SessionID实现Session传递。

和Cookie基本一样,session_start()必须在程序最开始执行,前面不能有任何输出内容。

PHP的session存储:

1、默认是通过文件的方式实现,即存储的服务器端的session文件,每个session一个文件。(扩展:当一个目录的文件数超过2000时,读写这个目录就会非常慢。解决版本:对存放目录多级散列,PHP.ini中session.save_path设置)

2、存储在数据库,MYSQL选MEMORY存储引擎

3、存储到Memcached和Redis等

Session工作原理:

Session通过 一个称为PHPSESSID的cookie和服务器联系。Session是通过SessionID判断客户端用户的,即Session文件名。(HTTP协议本身不能支持服务器端保存客户端的状态信息,为了解决这个问题引入了Session)


SessionID实际上是在客户端和服务器端之间通过HTTP Request和HTTP Response传来传去。

怎么保证SessionID安全:按照一定算法生成,必须包含在HTTP Request里面,保证唯一性和随机性。

session过期后PHP会进行回收,因此Session并非都随着浏览器关闭而消失。


Session和Cookie的区别:

本质上没有任何区别,都是对HTTP协议的局限性而提出来的一种保持客户端和服务器间的保持会话连接状态的机制。

如果没有禁用Cookie,Cookie在启动Session会话的时候扮演的是存储sessionId和session生成周期的角色。

SessionID作为一个Cookie是存储在客户端,除此之外session是运行在服务器端,Cookie是运行在客户端。


误区:

1、session是运行在服务器端,Cookie是运行在客户端。

答:错,SessionID作为一个Cookie是存储在客户端。

2、Session比Cookie安全?

答:通常情况下,Cookie和Session是绑定的,获得Cookie就相当于获得了Session,客户端把劫持的Cookie和Session原封不动的传给服务器,服务器接收后原封不动的验证Session,若Session存在,就实现了cookie和session的绑定过程,因此不存在session比cookie更安全的说法。

不安全只能是说代码不安全,错误的把用作身份验证的cookie作为权限来验证使用。

3、如何防止劫持了cookie能登录账号问题?

答:需要在cookie中针对IP、UA等加上特殊的校验信息,然后和服务器端进行比对。


资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 “STC单片机电压测量”是一个以STC系列单片机为基础的电压检测应用案例,它涵盖了硬件电路设计、软件编程以及数据处理等核心知识点。STC单片机凭借其低功耗、高性价比丰富的I/O接口,在电子工程领域得到了广泛应用。 STC是Specialized Technology Corporation的缩写,该公司的单片机基于8051内核,具备内部振荡器、高速运算能力、ISP(在系统编程)IAP(在应用编程)功能,非常适合用于各种嵌入式控制系统。 在源代码方面,“浅雪”风格的代码通常简洁易懂,非常适合初学者学习。其中,“main.c”文件是程序的入口,包含了电压测量的核心逻辑;“STARTUP.A51”是启动代码,负责初始化单片机的硬件环境;“电压测量_uvopt.bak”“电压测量_uvproj.bak”可能是Keil编译器的配置文件备份,用于设置编译选项项目配置。 对于3S锂电池电压测量,3S锂电池由三节锂离子电池串联而成,标称电压为11.1V。测量时需要考虑电池的串联特性,通过分压电路将高电压转换为单片机可接受的范围,并实时监控,防止过充或过放,以确保电池的安全寿命。 在电压测量电路设计中,“电压测量.lnp”文件可能包含电路布局信息,而“.hex”文件是编译后的机器码,用于烧录到单片机中。电路中通常会使用ADC(模拟数字转换器)将模拟电压信号转换为数字信号供单片机处理。 在软件编程方面,“StringData.h”文件可能包含程序中使用的字符串常量数据结构定义。处理电压数据时,可能涉及浮点数运算,需要了解STC单片机对浮点数的支持情况,以及如何高效地存储显示电压值。 用户界面方面,“电压测量.uvgui.kidd”可能是用户界面的配置文件,用于显示测量结果。在嵌入式系统中,用
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 在 Android 开发中,Fragment 是界面的一个模块化组件,可用于在 Activity 中灵活地添加、删除或替换。将 ListView 集成到 Fragment 中,能够实现数据的动态加载与列表形式展示,对于构建复杂且交互丰富的界面非常有帮助。本文将详细介绍如何在 Fragment 中使用 ListView。 首先,需要在 Fragment 的布局文件中添加 ListView 的 XML 定义。一个基本的 ListView 元素代码如下: 接着,创建适配器来填充 ListView 的数据。通常会使用 BaseAdapter 的子类,如 ArrayAdapter 或自定义适配器。例如,创建一个简单的 MyListAdapter,继承自 ArrayAdapter,并在构造函数中传入数据集: 在 Fragment 的 onCreateView 或 onActivityCreated 方法中,实例化 ListView 适配器,并将适配器设置到 ListView 上: 为了提升用户体验,可以为 ListView 设置点击事件监听器: 性能优化也是关键。设置 ListView 的 android:cacheColorHint 属性可提升滚动流畅度。在 getView 方法中复用 convertView,可减少视图创建,提升性能。对于复杂需求,如异步加载数据,可使用 LoaderManager CursorLoader,这能更好地管理数据加载,避免内存泄漏,支持数据变更时自动刷新。 总结来说,Fragment 中的 ListView 使用涉及布局设计、适配器创建与定制、数据绑定及事件监听。掌握这些步骤,可构建功能强大的应用。实际开发中,还需优化 ListView 性能,确保应用流畅运
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值