通過Session跨頁面傳輸

2021-09-25 15:50:25 字數 1919 閱讀 7876

製作專案的過程中,偶爾會出現需要將資料進行跨頁面傳輸的操作,本文就將展示如何通過session實現跨頁面傳輸的功能

在使用之前,可以先了解一下session的性質與儲存機制,session只要伺服器重啟或超過設定的儲存時間就會失效,防止因session失效而導致的問題

一. 傳輸的資料

當兩個頁面上的資料全部**於乙個id,可以只傳輸此id,傳遞到指定的頁面後,再次通過此id查詢.當然,如果兩個頁面的資料相同,也可以直接將所有資料都儲存在session中,然後在指定頁面上在輸出即可,本文使用的方法是通過傳輸決定性的資料,比如頁面上的資料都決定於乙個id(頁面上有乙個主表和一些主表的明細表,可以通過主表的主鍵id來決定此頁面的資訊)

二. 何時傳輸資料

傳輸資料在何時進行,需要在何操作前進行,何有講究,如果你的**的次序混亂,就可能無法達成預期的效果

圖就是乙個資料傳輸,先給session賦值,然後再進行頁面跳轉,如果先跳轉後賦值,會導致session還未賦值,頁面就去獲取session,然後獲取到的就是上一次的session,如果是第一次獲取,就是空值.所以一定要先賦值,後跳轉才能獲取本次的session

三. 建立乙個session

在檢視層建立乙個用於接收的方法,將頁面傳輸的資料賦值給session即可,由於本方法並不需要返回引數,所以返回值是什麼都沒有關係.

四. 頁面跳轉與載入事件

將session賦值完成後,就可以進行頁面跳轉,任何方式的跳轉都行,然後在跳轉頁面的頁面載入事件中判斷session中的值是否存在(為了防止呼叫的session未賦值,或者是特殊需求,比如只有當此頁面跳轉才回填,直接進行頁面跳轉則不回填等),如果跳轉的頁面已被開啟,則你的跳轉事件需要將開啟的頁面重新整理,才會出發頁面載入事件,所以直接在頁面跳轉之前,session**賦值之後,提前重新整理需要被賦值的頁面(需要判斷被重新整理的頁面是否存在),如果實在不會重新整理頁面,可以先將需要回填值的頁面關閉

五. 查詢與回填

因為選用的方法是傳乙個id所以需要通過id去查詢需要回填的值

在控制器中將session中的值取出,由於是id,所以將session先轉為int型別的值,然後再儲存在變數中

傳輸的資料一般可以用來界定查出的資料,一般是需要查的表(如果有多個表,如果是一對一的關係,則獲取其中乙個表的關係,如果是一堆多的關係,則獲取一的主鍵id,如果是前兩種情況的混合,則獲取同時與多條資料和一條資料連線的表的主鍵,如果沒有關係,則需要獲取多個主鍵)的主鍵id

session使用完後記得刪除或使用別的方法,這一步的主要原因是為了防止頁面關閉後再此開啟,由於session中的值依然存在,導致資料會再次回填,如果不是有特殊需求,一定要防止此結果的出現

總結:由於cookie不會因為伺服器的關閉而消失,所以不建議通過cookie進行跨頁面的回填

如果在檢視層使用session,但未賦值,則整個獲取session的**會為空具體效果為

var sa = @session[「id」] 如果session的值為空的效果 var sa =

此方法會報錯,所以在判斷是否為空時,可以(僅用於整形等可以數**算的資料型別)

(@session[「id」] + 0 ) > 0 如果session的值為空的效果 (+ 0) > 0

則不會報錯,且可以判斷出session中是否存在值

賦值一定要在頁面跳轉前才可以獲取到當前賦值給session中的值

如果回填的判斷放在頁面載入事件中,則需要在跳轉到該頁面時先重新整理,否者如果此頁面已被開啟,則無法回填,不會重新整理的可以先關閉需要跳轉的頁面

PHP跨頁面傳遞時session失效

一直都是使用wamp作為本地的php整合開發環境 今天遇到乙個很奇怪的問題,就是在跨頁面傳遞時session竟然失效了,而之前從來沒有出現過這種問題 因為使用的是開源的php框架為了測試方便就新建了兩個很簡單的php檔案進行測試 於是就出現了以下錯誤資訊,原因是 session目錄不存在 而wamp...

PHP跨頁面傳遞時session失效

一直都是使用wamp作為本地的php整合開發環境 今天遇到乙個很奇怪的問題,就是在跨頁面傳遞時session竟然失效了,而之前從來沒有出現過這種問題 因為使用的是開源的php框架為了測試方便就新建了兩個很簡單的php檔案進行測試 於是就出現了以下錯誤資訊,原因是session目錄不存在 而wamp裡...

Session跨域問題

session主要分兩部分 乙個是session資料,該資料預設情況下是存放在伺服器的tmp檔案下的,是以檔案形式存在,而非儲存在伺服器的記憶體中 另乙個是標誌著session資料的session id,session id,就是那個 session 檔案的檔名,session id 是隨機生成的,...