当前位置:首页 > PHP教程 > php会话 > 列表

session与cookie会话控制

发布:smiling 来源: PHP粉丝网  添加日期:2013-11-14 19:14:22 浏览: 评论:0 

b) 当客户端再次向服务器端发送一个http请求的时候,浏览器会把本地保存该请求地址的cookie信息发送到服务器,服务器会自动读取,并将其转换成 $_COOKIE 全局变量,方便调用。

2. PHP中的Session

如果使用session的会话机制,用户每次来访问网站时,都会为每一个访问者创建一个唯一的标示符来区分客户的身份。这种标示符被成为会话ID(SID),其实SID就是session文件的文件名,具有唯一性和随机性,以确保session的安全。

SID 2种传递方式: cookie 或者  URL传递

session_start()

① 为当前访客分配一个唯一的session_id

② 在访客的客户端生产一个存放 session_id  的cookie  此cookie名默认为 PHPSESSID

③ 在服务器端生成一个session文件,用来存放该访客的所有的会话信息。  session文件名为    sess_session_id的值   (前提:服务器设置的session存放方式为files)

session通常使用过期时间为0的cookie,并且将一个称为session ID的唯一标识符作为cookie的值,
在服务器端同步生成一些session文件(可以自己定义session的保存类型),与用户机关联起来.并且让数据随着用户在页面之间传递.

要使用session,首先必须通过session_start()来开启一个会话。

2.1 sessionID的传送  (cookie 和 URL)

2.1.1 通过cookie传送sessin ID

使用session_start()调用session,服务器端在生成session文件的同时,同时生成session ID哈希值和默认值为 PHPSESSID 的session name,并向客户端发送变量为(默认的是)PHPSESSID(session name),值为一个128位的哈希值.服务器端将通过该cookie与客户端进行交互.

session变量的值经php内部系列化后保存在服务器机器上的文本文件中,和客户端的变量名默认情况下为PHPSESSID的coolie进行对应交互.即服务器自动发送了http头:header('Set-Cookie: session_name()=session_id(); path=/');即setcookie(session_name(),session_id());

当从该页跳转到的新页面并调用session_start()后,PHP将检查与给定ID相关联的服务器端存贮的session数据,如果没找到,则新建一个数据集.

2.1.2 通过URL传送session ID

只有在用户禁止使用cookie的时候才用这种方法,因为浏览器cookie已经通用,为安全起见,可不用该方法.

xxx,也可以通过POST来传递session值.

2.2 session基本用法实例

  1.  
  2.     // page1.php  
  3.     session_start();  
  4.     echo 'Welcome to page #1';  
  5.     $_SESSION['favcolor'] = 'green';  
  6.     $_SESSION['animal'] = 'cat';  
  7.     $_SESSION['time'] = time();  
  8.     // 如果客户端使用cookie,可直接传递session到page2.php  
  9.     echo 'page 2';  
  10.     // 如果客户端禁用cookie  
  11.     echo ' . SID . '">page 2';  
  12. ?>  
  13.  
  14. // page2.php  
  15. session_start();  
  16. print $_SESSION['animal']; // 打印出单个session  
  17. var_dump($_SESSION); // 打印出page1.php传过来的session值  
  18. ?> 

2.3 删除session 要三步实现.

  1.  
  2. session_destroy();  // 第一步: 删除服务器端session文件,这使用  
  3. setcookie(session_name(),'',time()-3600);  // 第二步: 删除实际的session:  
  4. $_SESSION = array();  // 第三步: 删除$_SESSION全局变量数组  
  5. ?> 

2.4 常用session函数:

bool   session_start(void); 初始化session

bool   session_destroy():  删除服务器端保存session信息的文件

string session_id() 当前session的id

string session_name() 当前存取的session名称,也就是客户端保存session ID的cookie名称.默认PHPSESSID。

array  session_get_cookie_params() 与这个session相关联的session的细节.

void   session_set_cookie_params ( int lifetime [, string path [, string domain [, bool secure [, bool httponly]]]] )设置与这个session相关联的session的细节

string session_cache_limiter() 控制使用session的页面的客户端缓存

ini    session_cache_expire() 控制客户端缓存时间 

bool   session_set_save_handler ( callback open, callback close, callback read, callback write, callback destroy, callback gc )定义处理session的函数,(不是使用默认的方式)

bool   session_regenerate_id([bool delete_old_session]) 分配新的session id, 用一个新的session_id替换掉当前的session_id, 保存原有的session信息到新的session文件中, 如果参数为true的话,会同时删除原有的session文件,

####################################

#  配置文件中session常用设置

####################################

[Session]

定义了存储和获取与会话相关联数据的处理器名称。四种:①files 文件(默认) ②mm  共享内存 ③sqlite  SQLite数据库  ④user  用户自定义的函数  session.save_handler = files,传送到save_handler的参数.  在使用文件的情况下, 这里是数据文件被保存的路径.注意: Windows 用户必须改变此值来使用PHP的会话函数.和在 4.0.1一样, 你可以定义如下路径:

session.save_path = "N;/path"

这里的 N 是一个整数.  使用此参数会在目录内建立一个N层深度的子目录用来保存session文件,而不是将所有session文件保存在同一个/path目录内.这对你或当你的操作系统在一个目录内保存太多文件时出现问题很有帮助.并且对于处理大量session的服务器提供更高的效率.

Tags: session cookie 会话

分享到: