SESSION与COOKIE问题,可以说是一个老生常谈的问题,对于什么是SESSION,什么是COOKIE,我这里就不多说了,

GOOGLE一下,一大把(或者:去看:http://hi.baidu.com/fc_lamp/blog/item/da10f32cf47b843e349bf7c3.html)

今天,我要说的是如何在同一页面重复的操作同一个session.name官网说明:session.name指定会话名以用做 cookie 的名字。只能由字母数字组成,默认为PHPSESSID。即:人为修改PHP自动生成的SESSION ID。

首先,我们知道 一旦 PHP session_start()后就开启了一个会话。这当种了两件事:一是把相关SESSION信息存放于服务器端(产生一个类似于sess_XXX这样的文件),二是把会话名session name(默认为:PHPSESSID),以及SESSION ID发给浏览器以cookie的方式存起来(即:cookie_name : SESSION ID)。这样,当再次访问页面时,浏览器再把COOKIE里的SESSION ID发给服务器(当然,COOKIE里的值是没有过期的),PHP比对服务器上的SESSION文件,如果没有得话,会产生一个新的SESSION文件,如果有得话,则直接使用。这里有两点值的说明一下:

1 :对于登录合不合法之类的是你自己写PHP脚本来判断的,即比对$_SESSION里的值(因为新产生的SESSION文件里是没有任何值的)。

2 :把COOKIE里的SESSION ID传给服务器(PHP)后,在使用SESSION ID之前有一个选择。前面,我们说过SESSION ID在COOKIE里是以键值配对方式存放的,键即为会话名(session name),一般如果没有事先声明(在session_start()之前)PHP是使用默认的会话名,即PHPSESSID,所以不同页面可以有不同的会话名。如下图所示:


所以,对于特殊的SESSION ID,要使用时必须事先声明(设置)会话名,才能正常的引用。

那么如何设置会话名(session name)呢?设置session name的方试一般有两种:

1:在php.ini配置文件里修改:在php.ini文件里找到:session.name = PHPSESSID  即可完成设置

2:使用session_name()函数设置,eg:session_name('test9');

这里要注意一下:关于session name的问题。恩,在这里我直接引用官网上的一段话(简单的E文,想必大家都看的懂):

The session name references the session id in cookies and URLs. It should contain only alphanumeric characters; it should be short 

and descriptive (i.e. for users with enabled cookie warnings). Ifnameis specified, the name of the current session is changed to its value.

The session name can't consist of digits only, at least one letter must be present. Otherwise a new session id is generated every time.

以上这段非常重要,请你一定要仔细看。或者去官网:http://cn.php.net/manual/zh/function.session-name.php

好了,有了以上的说明后我们来看一段同一页面重复的操作同一个session.name代码:

    if(isset($_COOKIE['test9'])){//如果已有值,则销毁
        session_name('test9');
        session_start();
        setcookie('test9','',time()-3600);//相应COOKIE也过期(这段代码实际上可以不要)
        session_unset();
        session_destroy();
    }
    //重新播种SESSION
    session_name('test9');
    session_id(md5(uniqid()));
    session_start();
    $_SESSION['test'] = 'test';

    var_dump($_COOKIE);


 另外:官网上也有讨论设置SESSION生命周期的问题,可以看看。地址:http://cn.php.net/manual/zh/function.session-set-cookie-params.php