SESSION与COOKIE的理解

对于普通的注册登录页面来说,我们是要通过session来保存用户当前状态.然后到达一定时间之后就销毁重新登录.

SESSION下的几条指令

  1. session_start()
    当正常默认的情况下,脚本结束之后,会把session数组中的数据写入到session文件中,而这个文件路径可以再php.ini中找到
    session_start()之后代表初始化session,并且分配一个唯一session id,如果这个可以通过这个id在本地中找到session文件,那么就会把里面的数据加载到session的数组当中
  2. unset()
    这个函数简单理解就是清空的意思
    unset( SESSION[id]);SESSIONid,SESSION,..unset( _SESSION)就是直接把数组给删除了.
  3. session_unset()
    在 session生命周期,从当前session中注销全部session数据,让$_SESSION成为一个空数组。
  4. session_destroy()
    注销一个session。意味着session生命周期结束了。这里会把session文件给删除掉,但是不会影响到$_SESSION数组在内存中的值.假如我们重新刷新页面的话,session_start()就不能获取到值,而同时session数组清空

SESSION 和 COOKIES

概要:
Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用Cookie,那么Session也会失效。

cookie指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。

每当我们关闭浏览器之后,再重新打开浏览器之后,会重新生成一个sessionID,所以对应的cookies就找不到了.那么怎么实现记录登录状态呢?关闭浏览器之后再打开还在.因为cookies是存在本地上的,我们不可能把用户的信息存在本地上,不安全.那么我们肯定是存在session里面的.这个我们后期文章再讨论.这里再继续谈下cookie

同时,cookie也有自己的有效期,过了期以后就失效了,本地的cookie文件会被自动删除。需要再次登录,输入帐号密码,然后生成新的cookie。这样做的主要目的还是为了安全考虑。

COOKIE使用方法

1.设置cookie

setcookie("username","user",0,"/");  
setcookie("username","user",time()+60*60,"/");  

第一个当中的时间放了个0进去,难道代表生存时间为0.明显不可能,它有着特殊的意义,表示cookie的有效期随着浏览器的关闭而结束。他们的路径中都放了个”/”。这个就代表在这个域名下的所有contentpath都可以访问cookie,也就是说这个网站下的所有页面都可以追踪这个cookie。

2.删除cookie

setcookie("username","",time()-3600,"/");  

3.查看cookie

print_r($_COOKIE);

SESSION的使用方法

在php.ini中
1、session.use_cookies
把这个的值设置为1,利用cookie来传递sessionid

2、session.cookie_lifetime
这个代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废

3、session.gc_maxlifetime
这个是Session数据在服务器端储存的时间,如果超过这个时间,那么Session数据就失效,但是删除是看几率(如下面所说)。

SESSION过期

设置php.ini,找到session.gc_maxlifetime = 1440 #(PHP5默认24分钟)

session.gc_probability = 1
session.gc_divisor = 1000

garbage collection 有个概率的,1/1000就是session 1000次才有一次被回收。
只要你的访问量大了,那就能达到回收的效果.
或者你也可以设置一下session.gc_divisor 的值,
比如:session.gc_divisor = 1,这样就能明显的看到SESSION过期的效果了.

怎么实现准确的让一个session过期

1.如果单纯通过设置session生命周期是不行的,因为session大概率还保留在服务器上.如果设置大概率的gc调用呢,也是不行的,如果我们session数据修改了,这样session文件修改时间也变了.又得重新算,不准确

2.设置session.cookie_lifetime.貌似这样就不能通过cookie来获取session id了.但是可以通过URL重写来获取session内容

3.只能通过给session第一次操作的时候,添加一个时间戳,每次访问之前都判断一下就可以的.

你可能感兴趣的:(PHP,session,cookie,php)