session、cookie浅见
万事开头难,刚开始不一定能写好博文,不,应该是一定写的不好,但我定会用心。
以前只知道session是存在服务器,cookie是存在客户端,至于它们工作的原理就不了解了。为了巩固自己记忆,小小的总结了下。
一. 首先session,cookie是什么。
session是用户登录网站后存储在服务器的信息,而cookie就是验证用户、获取session中存储信息的凭证。
每当我们登陆网站成功后,服务器都会生成一个session用来记录当前登陆用户的信息,同时网站会要求我们的浏览器对应的存储一个cookie(一般是由服务器生成的PHPSESSID)。浏览器每次发送请求都要将cookie传给服务器用于验证用户是否处于登陆状态。
二. session_start()
当程序运行到 session_start()的时候,服务器就生成一个用于存储session信息的文件,同时会生成一个唯一的sessionId。sessionId(即PHPSESSID)则以cookie的方式保存在客户端。
三. session的存储方式。
session默认是以文件的方式存储(php.ini文件中有一行是:session.save_handler = files)。
文件存储有两个弊端,〈1〉读取session比较慢,用户量少的话还行,但用户量大的话就会导致大量的输入输出的冗余,这样服务器可能就撑不住了〈2〉多台服务器之间session的共享比较复杂(看过别人用NFS方式实现,不过我自己倒没有尝试过)。
数据库存储不存在共享的问题,但是频繁的读写也是很消耗资源的。
那有没有更好的方法,当然有了,就是将session存放在缓存中。这里介绍两种缓存(redis和memcache)。
redis包含字符串、列表、集合、哈希、有序集合这五种数据结构。memcache只支持key-value的键值对应的存储,所以说redis比memcache强大许多。但是memcache更轻量级,redis对内存消耗很大。如果你的网站的缓存只用于存储session。我觉得memcache会更好一些。
session存储设置方式(以memcache为例):
ini_set('session.save_handler', 'memcache');
session_save_path("tcp://127.0.0.1:11211");
注:可能有理解错误的地方,而且还有些地方搞不太懂,以后会修改添加。
session、cookie浅见的更多相关文章
- session & cookie(li)
Session & Cookie 一.定义 Session,用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间.Cookie,由服务器端生成,发送 ...
- web也是区分前端与后端的,session\cookie辨析
<1>Ajax交互方式 Ext.Ajax.request( { //被用来向服务器发起请求默认的url url : "", //请求时发送后台的参数,既可以是Json对 ...
- 浅析session&cookie
session&cookie没有出现的黑暗时代 大家都知道,HTTP协议是一种无状态的协议,本次请求下一次请求没有任何的关联,所有没有办法直接用http协议来记住用户的信息,试想一向,每一次点 ...
- http之Session&Cookie
百度了一波session与Cookie,我发现这东西远比我想象中更复杂(可能是因为我不明白底层的运行原理).网上也是一堆的关于Session与Cookie区别/联系的文章,然而,我看完了还是一脸懵逼的 ...
- Asp.net MVC使用Model Binding解除Session, Cookie等依赖
上篇文章"Asp.net MVC使用Filter解除Session, Cookie等依赖"介绍了如何使用Filter来解除对于Session, Cookie的依赖.其实这个也可以通 ...
- Asp.net MVC使用Filter解除Session, Cookie等依赖
本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应用场景. 同时针对MVC中的对于Session,Cookie等的依赖,如何使用Filter解依赖. 如果大家有 ...
- [转]Asp.net MVC使用Filter解除Session, Cookie等依赖
本文转自:http://www.cnblogs.com/JustRun1983/p/3279139.html 本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应 ...
- [转载]JavaEE学习篇之——Session&&Cookie
原文链接: http://blog.csdn.net/jiangwei0910410003/article/details/23337043 今天继续来看看JavaWeb的相关知识,这篇文章主要来讲一 ...
- Redis+Django(Session,Cookie)的用户系统
一.Django authentication django authentication提供了一个便利的user api接口,无论在py中 request.user,参见Request and re ...
随机推荐
- Linux线程基础
复习中掌握线程的基本管理即可,而不用考虑线程的同步: 创建线程花费的代价,比创建进程小得多,所以同一个进程的,多个线程执行多个任务-->比多个进程执行多个任务更有效率. 线程也分为用户级线程.内 ...
- 安装CentOS7文字界面版后,无法联网,用yum安装软件提示 cannot find a valid baseurl for repo:base/7/x86_64 的解决方法
*无法联网的明显表现会有: 1.yum install出现 Error: cannot find a valid baseurl or repo:base 2.ping host会提示unknown ...
- Lind.DDD.RedisClient~对StackExchange.Redis调用者的封装及多路复用技术
回到目录 两雄争霸 使用StackExchange.Redis的原因是因为它开源,免费,而对于商业化的ServiceStack.Redis,它将一步步被前者取代,开源将是一种趋势,商业化也值得被我们尊 ...
- 测试docker不同主机间容器互相访问
测试服务器(centos6.5):192.168.16.70 网卡:eth0192.168.16.74 网卡:eth0第一步,分别在2台机器执行: yum install docker service ...
- js获取可视区域高度
document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象高度 document.docume ...
- 每日一记-mybatis碰到的疑惑:String类型可以传入多个参数吗
碰到一个觉得很疑惑的问题,Mybatis的parameterType为String类型的时候,能够接收多个参数的吗? 背景 初学Mybatis的时候,看的教程和书籍上都是在说基本的数据类型如:int. ...
- CADisplayLink 及定时器的使用
第一种: 用CADisplayLink可以实现不停重绘. 例子: CADisplayLink* gameTimer; gameTimer = [CADisplayLink displayLinkW ...
- Oracle视图时间戳转为Date
CREATE OR REPLACE VIEW PDAORDER AS SELECT po.id id, po.order_no AS order_no, po.money AS money, (SEL ...
- 架构师养成记--8.Queue
一.ConcurrentLinkedQueue 是一个适合在高并发场景下,无锁,无界的,先进先出原则.不允许为null值,add().offer()加入元素,这两个方法没区别:pull().peek( ...
- 【转载】STL之priority_queue
参考资料:传送门先回顾队列的定义:队列(queue)维护了一组对象,进入队列的对象被放置在尾部,下一个被取出的元素则取自队列的首部.priority_queue特别之处在于,允许用户为队列中存储的元素 ...