php及codeigniter使用session-cookie的方法詳解

來源:互聯網
上載者:User
本篇文章主要介紹php及codeigniter使用session-cookie的方法詳解,感興趣的朋友參考下,希望對大家有所協助。

1、讀寫cookie

<1>原生

setcookie('name','value',time)

設定失敗,沒有正常寫入瀏覽器,測試失敗,原因未知

<2>CI架構

$this->input->set_cookie("views","test10",1000);echo $_COOKIE["views"];//此方法擷取值時,如果值不存在會報錯,當然可以先用isset($_COOKIE["views"])判斷一下

<3>通過helper

$this->load->helper('cookie');//這行放在view也是可以的,隨便set_cookie('views','test10',1000);echo get_cookie('views');//此方法擷取值如果擷取不到,會返回空,不會報錯

2、讀寫session

<1>原生session

啟動:

<?phpsession_start();?>

賦值:

$_SESSION['views'] = "test20";

取值:

echo "Session:". $_SESSION['views'];

存續時間:

會話。當瀏覽器關閉,cookie裡面的phpsession就會清空,下次開啟會重建一個

雖然伺服器還儲存著這個session。session的到期時間在php.ini裡設定,參見另一篇文章php(codeigniter)安全性注意事項

<2>CI架構session

啟動:

$this->load->library('session');//load必須在controller完成,當要使用session必須先load賦值:$this->session->views = "test11";

取值:

echo "Session:". $_SESSION['views'];

存續時間:

用戶端有2個小時的存續時間,當伺服器的session被刪除,因為用戶端的session id還是有效,所以當再次開啟的時候,服務端會再建立一個跟用戶端session id相同的session,當然是建立新id還是老id並不重要,因為只是id同名,裡面是沒有資料的

<3>區別

>兩個session名稱是不同的,一個叫phpsession,一個叫ci_session

>只能啟動一個,不能兩個都啟動

>取值是相同的

>兩個千萬不要混用,應該全面放棄原生的方式

>原生phpsession的是隨便訪問的,ci_session是httponly的,這就意味著原生的session可能會被通過xxs攻擊,通過js擷取到cookie

<4>例外情況

有一種情況是這樣的:

當此時已經存在ci_session,因為這個ci_是持久化的

//session_start();//沒有啟動原生的session//$this->load->library('session');//沒有啟動ci的session$_SESSION['views'] = "test23";//直接用原生的方式進行賦值echo "Session:". $_SESSION['views'];//可以正常取值出來"test23"

通過查看cookie,發現沒有原生session存在,只能是走的ci session,那麼在伺服器的session裡找到這個檔案,發現這個值沒有寫進去 如果有聲明session_start(),他就會走原生的模式,會重新建立一個phpsession,並且值會寫進去

如果什麼都沒聲明,也沒有賦值,直接取值,那麼會報錯,因為要使用ci_session必須要load,我們沒有load就會報錯,所以證明了,在用原生的方式進行賦值的時候,他相當於啟動了session,啟用了ci_session,但他又沒有許可權寫入,這可以說是一個bug

<5>session如何運作

cookie的運作比較容易理解,就是寫入到使用者cookie,寫什麼讀出來就是什麼。只要是本站的cookie,就可以通過索引值讀出來。

session的值是存在伺服器的,但是怎麼知道這個值是哪個使用者的?通過在使用者cookie裡存入那個session的檔案名稱,而儲存的值放在伺服器同名的檔案裡面。說的盜取cookie指的就是盜取這個,重要的資訊存在伺服器上,但是這個被盜了也完蛋。所以,也不能相信cookie裡存的這個session-key,應該做一個鑒權。

注意,寫入session的同時,寫session-key到使用者的cookie裡這個是自動完成的,這個存續時間應該是在伺服器的php.ini裡面配置。

以上就是本文的全部內容,希望對大家的學習有所協助。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.