HTML Rails ActiveR?ecord Session 在HTML5 SessionStorage中存儲而不是中存Cookie
介紹:
在傳統的Web應用中,我們通常使用C(???)ookie來(lái)存儲和管理用戶(hù)會(huì )話(huà)信息,中存隨著(zhù)HTML5的中存發(fā)展,我們可以利用HTML5提供的中存SessionStorage來(lái)替代Cookie來(lái)存儲會(huì )話(huà)信息,本文將??介紹如何在HTML Rails應(ying)用程序中使用ActiveRecord會(huì )話(huà)并將它們存儲在HTML5的中存SessionStorag(′?_?`)e中。
小標題1:配置HTML Rails應用(yong)程序以使用SessionStorage
步驟1:在config/applic(╬ ò﹏ó)ation.rb文件中(zhong)添加以下代碼行:
config.session_store :active_record_store,中存 key: '_your_app_session'這將配置應用??程序使用ActiveRecord存儲會(huì )話(huà)信息,并指定一個(gè)鍵值對作為會(huì )話(huà)標識符。中存
步驟2:創(chuàng )建一個(gè)名為session_store.rb的中存文件,并將(jiang)其放??在config/initializers目錄下,中存在該文件中添加以下代碼:
class ActiveRecordStore < ActionDispatch(???)::Session::CacheStore def read(session_id) session?? = find_by_session_(′?ω?`)id(session_id) || fetch_session(sessio??n_id) serialized_session(session) if session end def write(session_id,中存 session_data) data = deserialized_session(session_data) @sessions[session_id] = data unless data.n(?_?;)il? || data.empty? save_session(data(╬?益?), seヽ(′▽?zhuān)?ノssion_???id) endend
這段代碼定義了一個(gè)自定義的會(huì )話(huà)存儲類(lèi),它繼承自ActionDispatch::Session::CacheStore,并重寫(xiě)了read和write方(′ω`)法以適應ActiveRecord存儲方式。
小標題2:將A??ctiveRecord會(huì )話(huà)存儲到SessionStorage中
步驟1:在ヽ(′?`)ノ需要存儲會(huì )話(huà)信息的控制器中,引入所需的模塊:
require 'action_dispatch/middleware/cookies'require 'active_record'
步驟2:在控制器的(de)方法(//ω//)中,使用以下代碼將ActiveRecord會(huì )話(huà)存儲到SessionStorage中:
def store_ses(′▽?zhuān)?sion_in_storage(session) session[:user_id] = current_user.id if current_user sessi???on[:last_visited] = Time.curre(′_`)nt.to_s if session[:last_visited].nil? session.to_json.html_safe! # 將會(huì )話(huà)數據轉換為JSON格式并確保其為安全的HTML內容end
上述代碼??首先檢查當前用戶(hù)是否存在,如果存在(′?`*)則將其ID存儲在會(huì )話(huà)中,它將最后一次訪(fǎng)??問(wèn)時(shí)間存(cun)儲在會(huì )話(huà)中(如果尚未存在),它將會(huì )話(huà)數據轉換為JSON格式并確保其為安全的HTML內容。
步驟3:在控制器的其他方法中,使用以下代碼從SessionStorage中讀取會(huì )話(huà)信息并將其解析為ActiveRecord會(huì )話(huà)對象:
def retrieve_session_from_storage(sess??ion) session = JSON.parse(session) if session.is_a?(String) && session.present? # 如果會(huì )話(huà)是?字符串且不為空,則解析為JSON對象 session || { } # 如果會(huì )話(huà)不存在或為空,則創(chuàng )建一個(gè)空的哈希對象作為默認值end上述代碼首先檢查會(huì )話(huà)是否為字符串且(′▽?zhuān)?)不為空,如果是,則將其解析??為JSON對象,否則,它將創(chuàng )建一個(gè)空的哈希對象作為默認值。
| 步驟 | 描述 |
| 配置應用(yong)程序以使用Session??Stor(╬?益?)age | 在config/application.rb文件中添加配置代碼 |
| 創(chuàng )建自定義的會(huì )話(huà)存儲類(lèi) | 創(chuàng )建一個(gè)名為(wei)session_store.rb的文件,并(bing)定義自定義的會(huì )話(huà)存儲類(lèi) |
將ActiveRecord???會(huì )話(huà)存儲到SessionSto(′?_?`)rag(′_`)e中 | 在控制器的方法中使用相關(guān)代碼將ActiveRecord會(huì )話(huà)存儲到SessionStorage中 |
| 從SessionStorage中讀取會(huì )話(huà)信息 | 在控制器的其他方法中使用相關(guān)代碼從SessionStorage中讀取會(huì )話(huà)信息 |