关于保存问题

如果高并发不多的话可以保存session 否则用cookie吧,session可以保存到其他服务器哦,比如其他服务器的redis memacache(没有持久化,崩了登录信息就全没了)

HTTP协议是无状态的协议,不能告诉我们是否来自同一个人的请求。

会话控制:允许服务器跟踪同一个客户端做出的连续请求。

同一台电脑上面的同一个浏览器。

cookie,服务器端给客户端的信息让客户端存储。
原理:一个用户在访问服务器的时候,服务器脚本根据业务逻辑设置cookie给用户,用户在客户端电脑特定的文件夹下创建关于这个网站的文本文件(通常和域名有关),用于记录要保存的变量,访问多个网站的时候就创建多个这样的文件,用户在访问其他该网站的页面的时候http协议会将文件中的值带给其他页面以供使用。

这个保存网站信息的文件叫cookie文件,一整套这样的机制叫做cookie机制。

文件存储的位置:
IE:C:\Documents and Settings\yanhaijing\Cookies
火狐浏览器:工具-》选项-》隐私-》使用自定义记录历史-》显示cookies

早期cookie的使用是有争议的。服务器端往客户端写文件是很敏感的。但是其实cookie是个很特殊的东西,他必须在特定的文件夹下面创建特定的文件,并且只能是文本文件。

保存cookie:
setcookie(),将一个或多个变量放到客户端的cookie中。
setcookie('名','值',保存时间秒);

setcookie("user[username]", "skygao");//可以是数组和多维数组

setcookie("user[password]", md5("123456")); //$_COOKIE["user"]["password"]

注意:
1、第三个参数保存时间如果不写就是关闭浏览器就删除该cookie,默认值是0

如何获得cookie的值
$_COOKIE

例子:

$_COOKIE['woaini']='saibeidexue';

var_dump($_COOKIE);

array(2) { ["name"]=> string(6) "values" ["woaini"]=> string(11) "saibeidexue" }

删除cookie
setcookie(名,'',time()-1) 告诉客户端这个值已经过期。

注意:
1、设置cookie的值必须使用setcookie设置不能使用$_COOKIE['']这种方式设置    而sesson才是$_SESSION['val']='value'
2、第一次在设置cookie页面下面马上打印$_COOKIE是打印不出来的。
3、cookie里面设置设置关联数组也可以设置索引数组,但是所有数组的下标必须明确给出。
4、注意设置setcookie的第四个参数cookie的有效路径。他默认的路径是当前目录的路径。/表示的是网站的根目录。你在哪里设置就在哪里删除。

cookie华联超市。

session 物美超市

原理:

客户端第一次访问网站的时候服务器会给一个不重复号码(sessionid)给客户端,客户端将sessionid放在cookie里面。在创建sessionid的同时会在服务器的指定的文件夹下面创建一个和sessionid名字一样的文件,当下面用户再次请求这个网站的其他页面的时候将session id通过cookie带过来,然后该网站服务器通过sessionid在存储session的文件夹里面找对应的文件,从文件里面获取值。,所当用户禁用cookie时sessonid就无法保存了,我们在每次刷新或者请求别的页面时,服务器都将当做第一次请求,从而分配新的sessionid,这时我们就需要在每次请求的时候都需要post或者get传递该sessionid 然后用的时候使用session_id($_POST['session'])来告诉浏览器我需要这个sessionid'的数据,还有这条语句要在session_start()前

然后我再聊下session_id吧,它是保存在cookie中,首先session是一个只要活动就不会过期的东西,只要开启cookie,每一次会话,session_id都不会改变,我们可以根据session_id来判断用户是否是正常登陆,防止用户伪造session。然后我们也要防止session被劫持,我们可以对session_id进行再一次的加密,防止暴力破解,还有可以设置HttpOnly。通过设置Cookie的HttpOnly为true,可以防止客户端脚本访问这个Cookie,从而有效的防止XSS攻击。

第一次访问:

必要条件:

①启用session_start()

②php .ini设置

session.name = PHPSESSID

linux:session.save_path = "/tmp"  or  windows(phpstudy):session.save_path="D:\phpStudy\tmp\tmp"

步骤:浏览该网页-》尝试读取session.name的cookie(第一次访问无cookie是浏览器为发送该cookie从而是获取不到的)

为读取到-》创建$_SESSION变量,同时创建一个sess_liddbn1fnjj0t0ngae181ud9bt(名称为随机值)的session文件,

同时同时在session.save_path文件夹下生成和sessionid名字一样的session文件:sess_liddbn1fnjj0t0ngae181ud9bt(名称为随机值)

同时将liddbn1fnjj0t0ngae181ud9bt作为PHPSESSID的cookie值返回给浏览器端让其保存

注意:浏览器的cookie都是通过header头设置的cookie  php中的setcookie是对header的封装

header("Set-Cookie: PHPSESSID=liddbn1fnjj0t0ngae181ud9bt; path=/; domain=localhost; expires=".gmstrftime("%A, %d-%b-%Y %H:%M:%S GMT",time()+9600));

第二次访问:

浏览器存在cookie  访问时header头携带cookie值服务器,服务器尝试读取session.name的cookie(第二次访问服务器能获取到cookie了)

创建$_SESSION变量,并从相应的目录中(可以在php.ini中设置session.save_path的路径)读取sess_liddbn1fnjj0t0ngae181ud9bt文件,将字符装在入$_SESSION变量中;

--------------------------------------------------------------------------------------------------------------------------------

1、开启session(只有开启了session才能告诉PHP让它去调度服务器中的一些session机制。)

session_start();

session_start()的作用:
1、第一次时会向客户端发送session id,创建session文件。
2、以后使用时,根据http协议带过来的session id 找对应的服务器里面的session文件。

2、使用$_SESSION来存储值和读取值
$_SESSION

3、删除session
1、开启session_start();
2、清空session 数组 $_SESSION unset($_SESSION)
3、销毁session文件 session_destroy();
4、删除客户端session ID
setcookie('PHPSESSID','',time()-1,'/');

setcookie(session_name(),'',time()-1,'/');//

PHPSESSID 这个SESSION名可以改变

session_name('PHPSESSID');          设置session的名字 或者 session.name='PHPSESSID'             php.ini 设置session的名字:

session_name();                                 获得session的名字

session_id()                                        获取/设置当前会话 ID

session_id(‘qwer23456’)                     设置当前会话 ID

设置session生命周期

ini_set('session.gc_maxlifetime',3600);//设置session在服务器的存储事假
ini_set('session.cookie_lifetime',3600);//设置session在cookie中的存储时间
获取session生命周期 ini_get('session.gc_maxlifetime');

session.save_path session的保存路径

session_name()的默认值PHPSESSID
session_id() 默认值类似 9h1bano5p1lvt6tac5nvbboac7
$_COOKIE[session_name()] 等价于$_COOKIE['PHPSESSID']
sesion_id()=session_id('PHPSESSID') OR session_id(session_name()) 默认值类似 '9h1bano5p1lvt6tac5nvbboac7';

session是通过cookie('PHPSESSID')即通过cookie(session_name())保存的  cookie保存了sessionid

thinkphp3.23 设置过期时间无效的情况

在config .php配置如下:其中name(即改变上面的默认PHPSESSID)和expire必须

 'SESSION_OPTIONS'       =>  array(
//'name' => 'BJYSESSION', //设置session名 必须设置这个过期时间才会生效why??
'expire' => 10, //SESSION保存15天
'use_trans_sid' => 1, //跨页传递
'use_only_cookies' => 0, //是否只开启基于cookies的session的会话方式
), // session 配置数组 支持type name id path expire domain 等参数

php.ini session 配置

//设置用户自定义会话存储器的函数默认为files文件存储

session.save_handler = files

//session.save_path 定义了传递给存储处理器的参数。如果选择了默认的 files 文件处理器,则此值是创建文件的路径。默认为 /tmp     

;session.save_path = "/tmp"            //脚本读取/设置当前会话的保存路径session_save_path()

//指定模块是否使用严格的会话id模式。如果启用此模式,模块不接受未初始化的会话ID。如果从浏览器发送未初始化的会话ID,则将新的会话ID发送到浏览器。通过采用严格模式的会话,保护应用程序不受会话固定的影响。默认值为0(禁用)

session.use_strict_mode = 0

// 指定是否在客户端用 cookie 来存放会话 ID。默认为 1(启用)

session.use_cookies = 1

// 指定是否在客户端仅仅使用 cookie 来存放会话 ID。。启用此设定可以防止有关通过 URL 传递会话 ID 的攻击。此设定是 PHP 4.3.0 添加的。自PHP 5.3.0开始,默认值改为1(启用)

session.use_only_cookies = 1

//指定会话名以用做 cookie 的名字。只能由字母数字组成,默认为 PHPSESSID

session.name = PHPSESSID

//指定会话模块是否在请求开始时自动启动一个会话。默认为 0(不启动)

session.auto_start = 0

以下五个参数可以通过 session_get_cookie_params() 和 session_set_cookie_params()来获取或者设置

//以秒数指定了发送到浏览器的cookie的生命周期,值为0表示“直到关闭浏览器”。默认为0。这个与程序中setCookie(“name”,”zhangsan”,time()+60);类似

①session.cookie_lifetime = 0

//指定了要设定会话 cookie 的路径。默认为 /

②session.cookie_path = /

// 指定了要设定会话 cookie 的域名。默认为无,表示根据 cookie 规范产生 cookie 的主机名

③session.cookie_domain =

指定是否仅通过安全连接发送 cookie。默认为 off。此设定是 PHP 4.0.4 添加的

④session.cookie_secure =

//将cookie标记为只能通过HTTP协议访问。这意味着JavaScript等脚本语言无法访问cookie。此设置可以有效地帮助通过XSS攻击减少身份盗窃(尽管并非所有浏览器都支持此设置)

⑤session.cookie_httponly =

//定义用来序列化/解序列化的处理器名字

session.serialize_handler = php

//session.gc_divisor 与 session.gc_probability 合起来定义了在每个会话初始化时启动 gc(garbage collection 垃圾回收)进程的概率。此概率用 gc_probability/gc_divisor 计算得来。例如 1/100 意味着在每个请求中有 1% 的概率启动 gc 进程。session.gc_probability 默认为1   session.gc_divisor 默认为 100

下面这组数据就表示每一千个用户请求或者一个用户请求1000次(调用session_start())的时候就可能有1次触发回收机制(这里的请求是指session_start触发的次数

session.gc_probability = 1  //触发回收机制概率分子

session.gc_divisor = 1000 //触发回收机制概率分母

//session的最大保持时间

session.gc_maxlifetime = 1440

//包含有用来检查每个 HTTP Referer 的子串。如果客户端发送了 Referer 信息但是在其中并未找到该子串,则嵌入的会话 ID 会被标记为无效。默认为空字符串

//Referer 返回载入当前文档的文档的 URL 参数是一个网址

session.referer_check =                #防止带有ID的外部URL

// 给出了一个到外部资源(文件)的路径,该资源将在会话 ID 创建进程中被用作附加的熵值资源

session.entropy_file=

session.entropy_length=0     指定了从上面的文件中读取的字节数。默认为 0(禁用)。

//指定会话页面所使用的缓冲控制方法

session.cache_limiter = nocache

以分钟数指定缓冲的会话页面的存活期,此设定对 nocache 缓冲控制方法无效。默认为 180。参见 session_cache_expire()

session.cache_expire = 180

//开启后,指定是否启用透明 SID 支持。默认为 0(禁用)  为每个url后添加了session_name=session_id。

注意:

基于 URL 的会话管理比基于 cookie 的会话管理有更多安全风险。例如用户有可能通过 email 将一个包含有效的会话 ID 的 URL 发给他的朋友,或者用户总是有可能在收藏夹中存有一个包含会话 ID 的 URL 来以同样的会话 ID 去访问站点

session.use_trans_sid = 0

指定在启用透明sid支持时重写哪些HTML标记以包含会话ID。 默认为a = href,area = href,frame = src,input = src,form = form是特殊标记。 <input hidden =“session_id”name =“session_name”>被添加为表单变量

session.trans_sid_tags=

session.hash_function = 0                            #hash方法{0:md5(128 bits),1:SHA-1(160 bits)}

session.hash_bits_per_character = 5           #当转换二进制hash数据奥可读形式是,每个字符保留位数

//指定在使用透明 SID 支持时哪些 HTML 标记会被修改以加入会话 ID

url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

session.save_path="D:\phpStudy\tmp\tmp"

;session.upload_progress.enabled = On

;session.upload_progress.cleanup = On

;session.upload_progress.prefix = "upload_progress_"

;session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"

;session.upload_progress.freq =  "1%"

;session.upload_progress.min_freq = "1"

cookie、sesion的更多相关文章

  1. Django:forms局部函数、cookie、sesion、auth模块

    一.forms组件 二.cookie和session组件 三.auth组件 一.forms组件 1.校验字段功能 针对一个实例:注册用户讲解 模型:models class UserInfo(mode ...

  2. JS设置cookie、读取cookie、删除cookie

    JS设置cookie.读取cookie.删除cookie       JS设置cookie,注意一定要path=/ ,根目录,不然其他目录可能查询不到..默认是本目录. document.cookie ...

  3. JavaWeb学习之转发和重定向、会话技术:cookie、session、验证码实例、URLConnection使用(下载网页)(4)

    1.转发和重定向 HttpServletResponse response 转发: RequestDispatcher dispatcher = request.getRequestDispatche ...

  4. .net学习之Session、Cookie、手写Ajax代码以及请求流程

    1.IIS 7 以上版本集成了两种模式,一种是经典模式,一种是集成模式(直接将asp.net框架集成到IIS中) 2.浏览器和服务器端通过什么技术来实现的?Socket(套接字),通信的语法是HTTP ...

  5. cookie 、session、JSESSIONID

    cookie .session ? 让我们用几个例子来描述一下cookie和session机制之间的区别与联系.笔者曾经常去的一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微 ...

  6. 保护隐私:清除cookie、禁用cookie确保安全【分享给身边的朋友吧】

    常在网上漂,隐私保不了.ytkah深有体会,某天搜索一个词,然后你就能在一些网站上看到这个词的相关广告,神奇吧?这就是你的浏览器cookie泄露了,或者更严重地说是你的隐私泄露了,可怕吧!搜索引擎通过 ...

  7. iOS “请在微信客户端打开链接” UIWebview加载H5页面携带session、cookie、User-Agent信息 设置cookie、清除cookie、设置User-Agent

    公司新开的一个项目..内容基本上是加载H5页面显示..当时觉得挺简单的..后来发现自己掉坑里了..一些心理历程就不说了..说这个项目主要用到的知识点吧..也是自己踩得坑. 首先说说..这个项目上的内容 ...

  8. [转]cookie、session、sessionid 与jsessionid

    cookie.session.sessionid 与jsessionid,要想明白他们之间的关系,下面来看个有趣的场景来帮你理解. 我们都知道银行,银行的收柜台每天要接待客户存款/取款业务,可以有几种 ...

  9. Cookie、LocalStorge、SesstionStorge 的区别和用法

    前言 总括:详细讲述Cookie.LocalStorge.SesstionStorge的区别和用法. 1. 各种存储方案的简单对比 Cookies:浏览器均支持,容量为4KB UserData:仅IE ...

随机推荐

  1. 并行动画组QParallelAnimationGroup

    QParallelAnimationGroup会同时执行添加到该组的所有动画 import sys from PyQt5.QtGui import QPixmap from PyQt5.QtCore ...

  2. Oracle设置某张表为只读

    Oracle 11g开始支持设置某张表为只读,这样可以防范对某些表的修改,起到一定的安全性. 设置如下: --设置表为只读权限(加锁) ALTER TABLE tab_name READ ONLY ; ...

  3. centos7之系统优化方案

    优化条目: 修改ip地址.网关.主机名.DNS等 关闭selinux,清空iptables 添加普通用户并进行sudo授权管理 更新yum源及必要软件安装 定时自动更新服务器时间 精简开机自启动服务 ...

  4. python安装模块方法汇总

    方法一: 原文地址: http://blog.csdn.net/cighao/article/details/47860041 在 windows 系统下,只需要输入命令 pip install re ...

  5. Python 入门基础16 -- ATM + 购物车

    ATM + 购物车 1.需求分析 2.设计程序以及程序的架构 设计程序的好处: - 扩展性强 - 逻辑清晰 3.分任务开发 4.测试 黑盒: 白盒: 对程序性能的测试 5.上线运行 # Tank -- ...

  6. Pytorch 之 backward

    首先看这个自动求导的参数: grad_variables:形状与variable一致,对于y.backward(),grad_variables相当于链式法则dz/dx=dz/dy × dy/dx 中 ...

  7. DES加密模式详解

    DES加密模式详解 http://www.cnblogs.com/Lawson/archive/2012/05/20/2510781.html http://www.blogjava.net/wayn ...

  8. WPF当中StaticResource调用方法

    1.先在Converter命名空间当中,定义转换功能类: public sealed class BoolToValueConverter : System.Windows.Data.IValueCo ...

  9. git免密配置

    1.在git安装目录下双击bash.exeC:\DevTools\Git\bin 2.在弹出窗口内输入,回车,回车ssh-keygen -t rsa -C "542113457@qq.com ...

  10. MySQL数据库——安装教程(5.7版本)

    一.配置MySQL数据库 1.解压绿色版mysql,并改名为mysql5.7,如下图 对比一下下图5.6以前的版本,少data目录(存放数据)和my-default.ini文件(配置信息) 二.安装服 ...