1. 程式人生 > >php session跨頁面傳遞 session值丟失問題之完美解決

php session跨頁面傳遞 session值丟失問題之完美解決

今天想用一個session來實現使用者登入判斷,也算是對之前session的探究,查了下資料session的執行機制如下:

  session是伺服器端的一種會話機制,當客戶端的請求伺服器建立一個session時,伺服器會先檢測該請求裡面是否包含一個惟一的sessionID,如果是,說明伺服器已經為該使用者建立過session,只要按照該sesionID檢索出該使用者的session供使用者使用,如果沒有sessionID,伺服器會為該使用者新建一個帶有唯一表示服sessionID的session。建立完成後,該sessionID會被伺服器返回給客戶端,儲存到客戶端本地。

  一般儲存該session ID的機制是Cookie,但是由於Cookies可以被人為禁止,這就得保證Cookies被禁止之後,仍舊可以通過session進行會話,一般是通過url重寫進行,表現形式為http://...../xxx;jsessionid= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764,另一種是作為查詢字串附加在URL後面,表現形式為http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764這兩種方式對於使用者來說是沒有區別的,只是伺服器在解析的時候處理的方式不同,採用第一種方式也有利於把session id的資訊和正常程式引數區分開來。
為了在整個互動過程中始終保持狀態,就必須在每個客戶端可能請求的路徑後面都包含這個session id。

另外是關於session失效的誤區:

在談論session機制的時候,常常聽到這樣一種誤解“只要關閉瀏覽器,session就消失了”。其實可以想象一下會員卡的例子,除非顧客主動 對店家提出銷卡,否則店家絕對不會輕易刪除顧客的資料。對session來說也是一樣的,除非程式通知伺服器刪除一個session,否則伺服器會一直保 留,程式一般都是在使用者做log off的時候發個指令去刪除session。然而瀏覽器從來不會主動在關閉之前通知伺服器它將要關閉,因此伺服器根本不會有機會知道瀏覽器已經關閉,之所 以會有這種錯覺,是大部分session機制都使用會話cookie來儲存session id,而關閉瀏覽器後這個 session id就消失了,再次連線伺服器時也就無法找到原來的session。如果伺服器設定的cookie被儲存到硬碟上,或者使用某種手段改寫瀏覽器發出的 HTTP請求頭,把原來的session id傳送給伺服器,則再次開啟瀏覽器仍然能夠找到原來的session。

恰恰是由於關閉瀏覽器不會導致session被刪除,迫使伺服器為seesion設定了一個失效時間,當距離客戶端上一次使用session的時間超過這個失效時間時,伺服器就可以認為客戶端已經停止了活動,才會把session刪除以節省儲存空間。

好了,廢話說了一大堆,說session丟失的解決辦法吧:

1、session_start();應該儘量放置到頁面的頂部;

2、如果php.ini裡面沒有配置 session Autostart的話,每次會話之前,都得手動開啟session:session_start();

3、session是php裡面的超全域性變數,跟$_GET,$_POST,$_SERVER一樣,所以使用的時候必須大寫:$_SESSION['username']=$username;

4、跨頁面傳遞示例:a.php頁面傳遞$_SESSION['username']到b.php:

a.php:

<?php
session_start();
$username=$_POST['username'];
$_SESSION['username']=$username;
?>

b.php

<?php
session_start();
echo $_SESSION['username'];
?>

另外附上關於session以及Cookie講的比較清楚的文章:

相關推薦

php session頁面傳遞 session丟失問題完美解決

今天想用一個session來實現使用者登入判斷,也算是對之前session的探究,查了下資料session的執行機制如下:  session是伺服器端的一種會話機制,當客戶端的請求伺服器建立一個session時,伺服器會先檢測該請求裡面是否包含一個惟一的sessionID,如

php session 頁面

a.php <?php session_start(); $name = "miao3760"; $_SESSION["name"]=$name; ?> -------------------------------------------- b.php <?php session_s

mui頁面的傳和取

記錄 dial .html right options xtra tom ng- 根據 最近在做一個基於mui框架的移動app、遇到跨頁面傳值的問題、在此做以記錄 mui.openWindow({ url:‘parkDeta

vue實現頁面傳遞引數

A頁面帶著引數傳給B頁面,B頁面帶著該引數請求介面或者有其他用途 A頁面: /* 編輯 */ handleEdit (aa) { let params = { aaId: aa.aaId } this.$router.push(

ionic專案中頁面傳遞引數的幾種方式

1、使用angularjs自帶的$cacheFactory服務 $cacheFactory 從字面直譯即為快取工廠,可以用它來生成快取物件,快取物件以key-value的方式進行資料的儲存,在整個應用

小程式如何頁面傳遞物件陣列

前言在上一個答題的專案中,被一個非常小的功能折騰了整整三天當用戶在選擇題庫後,系統隨機從後臺返回20道題目由使用者作答,程式碼如下:queryMultiQuestionBank.find({ success: function (results) {

java結合wabacus實現session域、session共享(第二版)

宣告:該版相對於第一版有所改進。原因:每一版存在session覆蓋問題,分析如下: request().getServletContext().setAttribute("globelSession", session); 我們可以把globelSession想象成是索引

php jquery ajax 無法傳遞POST的問題

        做畢業設計從上週3開始,就遇到在表單頁面中將數庫傳到php處理頁面,無法接收到表單資料的問題。不管我怎麼除錯都不能把POST的值傳遞到php的處理頁面,我已經試了4天了,連今天是第五天,原來是問題出現在兩個方面: 1、mysqli_escape_String

解決wordpress安裝外掛時提示上傳問價的尺寸超過php.ini中定義的upload_max_filesize的問題(已解決)

解決wordpress安裝外掛時提示上傳問價的尺寸超過php.ini中定義的upload_max_filesize值的問題 想使用markdown外掛時文章排版更好,但是ftp伺服器不會配置,主要用的是雲伺服器,不是web伺服器 哈哈. 解決辦法是 直接vi

js url傳中文亂碼完美解決(JAVA)

div AR urldecode 更改 pos decode post 中文 解決亂碼 首先在你的jsp頁面這樣更改: var url="你要傳入的Action的位置&ipid="+ipid+"&keyWord="+key; 這裏的key是中文,從inp

PHP執行出現Notice : Use of undefined constant 的完美解決方案分享

今天修改公司的網站,提示Notice : Use of undefined constant ,通過下面的方法解決了,最好是error_reporting(0);不需要更改配置 Notice: Use of undefined constant ALL_PS - assumed 'ALL_P

vue 路由引數變化,頁面不重新整理,provide /inject 完美解決方案

此方法使用的是v-if來控制router-view的顯示或隱藏,v-if從false變為true時,vue會重新渲染router-view區域,所以當引數變化時,只需讓v-if 從true => false => false,就能實現頁面重新整理;

PHP中的會話控制—session和cookie(實現數據傳功能)

代碼 會有 數據 xmlns code 特點 會話控制 pre color 1.session 登錄上一個頁面以後,長時間沒有操作,刷新頁面以後需要重新登錄。 特點:(1)session是存儲在服務器;    (2)session每個人(登陸者)存一份;    (3)

ASP.NET頁面之間傳的方式Session(個人整理)

lec 傳遞 button doctype http 參考 方式 創建 logs   Session Session在ASP.NET中,表示客戶端(Goggle,Firefox,IE等)與服務器端的會話,用來存儲特定會話信息,準確來說,是用來存儲特定用戶信息。當客戶端向服務

php中如何傳遞Session ID

每次 將在 div 因此 nbsp linu 選項設置 調用 AS 一般通過在各個頁面之間傳遞的唯一的 Session ID,並通過 Session ID 提取這個用戶在服務器中保存的 Session 變量,來跟蹤一個用戶。常見的 Session ID 傳送方法主要有兩種。

iframe 域訪問session/cookie丟失問題解決方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

springMVC中JSP頁面獲取Session

spring中jsp使用JSTL語言進行Java後臺資料的取用 session的取值 一行程式碼樣例如下: ${sessionScope.user.nickName} 作用就是從seesion中獲取Attribute名字為user的物件裡面的nickN

php解決session域,驗證碼無效問題。

isset($_GET['getcode']) 最近在專案中遇到.net域名下通過iframe載入.cn域名網站。註冊的時候驗證碼失效了。其中也找到了辦法,不過不相容ie8及以下瀏覽器。一直反覆測試。今天終於成功了。 對於上面的一句話的前半句解釋下,估計有的同學搞不懂邏

SESSION無法傳遞問題

     問題來源 : 很早就搭建了個Lnmp環境,想把之前在Windows上開發的PHP專案遷移到Linux上,結果發現無法登陸,檢查了下PHP連線Mysql是沒有問題的,往下走,發現是SESSIO

jsp頁面獲取session的方式

jsp頁面獲取session值 java程式碼 @RequestMapping(value = "/chkUser",method = RequestMethod.POST,produces