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