2019-04-22 JDstore掃盲篇

1.session是什么?

Session:在計(jì)算機(jī)中,尤其在網(wǎng)絡(luò)應(yīng)用中,稱為“會(huì)話控制”。?Session?對(duì)象存儲(chǔ)特定用戶會(huì)話所需的屬性及配置信息。 ... 當(dāng)用戶請求來自應(yīng)用程序的Web 頁時(shí),如果該用戶還沒有會(huì)話,則Web 服務(wù)器將自動(dòng)創(chuàng)建一個(gè)Session?對(duì)象。
百度百科:https://baike.baidu.com/item/Session/479100

由于HTTP協(xié)議是無狀態(tài)的協(xié)議,所以服務(wù)端需要記錄用戶的狀態(tài)時(shí),就需要用某種機(jī)制來識(shí)具體的用戶,這個(gè)機(jī)制就是Session.典型的場景比如購物車,當(dāng)你點(diǎn)擊下單按鈕時(shí),由于HTTP協(xié)議無狀態(tài),所以并不知道是哪個(gè)用戶操作的,所以服務(wù)端要為特定的用戶創(chuàng)建了特定的Session,用用于標(biāo)識(shí)這個(gè)用戶,并且跟蹤用戶,這樣才知道購物車?yán)锩嬗袔妆緯_@個(gè)Session是保存在服務(wù)端的,有一個(gè)唯一標(biāo)識(shí)。在服務(wù)端保存Session的方法很多,內(nèi)存、數(shù)據(jù)庫、文件都有。集群的時(shí)候也要考慮Session的轉(zhuǎn)移,在大型的網(wǎng)站,一般會(huì)有專門的Session服務(wù)器集群,用來保存用戶會(huì)話,這個(gè)時(shí)候 Session 信息都是放在內(nèi)存的,使用一些緩存服務(wù)比如Memcached之類的來放 Session。


2.COOKIE和SESSION有什么區(qū)別?

思考一下服務(wù)端如何識(shí)別特定的客戶?這個(gè)時(shí)候Cookie就登場了。每次HTTP請求的時(shí)候,客戶端都會(huì)發(fā)送相應(yīng)的Cookie信息到服務(wù)端。實(shí)際上大多數(shù)的應(yīng)用都是用 Cookie 來實(shí)現(xiàn)Session跟蹤的,第一次創(chuàng)建Session的時(shí)候,服務(wù)端會(huì)在HTTP協(xié)議中告訴客戶端,需要在 Cookie 里面記錄一個(gè)Session ID,以后每次請求把這個(gè)會(huì)話ID發(fā)送到服務(wù)器,我就知道你是誰了。有人問,如果客戶端的瀏覽器禁用了 Cookie 怎么辦?一般這種情況下,會(huì)使用一種叫做URL重寫的技術(shù)來進(jìn)行會(huì)話跟蹤,即每次HTTP交互,URL后面都會(huì)被附加上一個(gè)諸如 sid=xxxxx 這樣的參數(shù),服務(wù)端據(jù)此來識(shí)別用戶。 Cookie其實(shí)還可以用在一些方便用戶的場景下,設(shè)想你某次登陸過一個(gè)網(wǎng)站,下次登錄的時(shí)候不想再次輸入賬號(hào)了,怎么辦?這個(gè)信息可以寫到Cookie里面,訪問網(wǎng)站的時(shí)候,網(wǎng)站頁面的腳本可以讀取這個(gè)信息,就自動(dòng)幫你把用戶名給填了,能夠方便一下用戶。這也是Cookie名稱的由來,給用戶的一點(diǎn)甜頭。所以,總結(jié)一下:Session是在服務(wù)端保存的一個(gè)數(shù)據(jù)結(jié)構(gòu),用來跟蹤用戶的狀態(tài),這個(gè)數(shù)據(jù)可以保存在集群、數(shù)據(jù)庫、文件中;Cookie是客戶端保存用戶信息的一種機(jī)制,用來記錄用戶的一些信息,也是實(shí)現(xiàn)Session的一種方式。


3.find_by 與 find的不同?(搜索后才發(fā)現(xiàn)還有個(gè)where)

區(qū)別是當(dāng)找到記錄時(shí),或者找不到記錄時(shí)返回的內(nèi)容。考慮以下示例:

>> User.create name: 'THE USER' # creates a user with id = 1
>> User.find(1) # returns the user>> User.find_by_id(1) # returns the user
>> User.where(id: 1).first # returns the user

您可以看到,可以使用3種方法中的任何一種提取現(xiàn)有用戶。使用where的最大區(qū)別是你可以鏈接命令(當(dāng)然,不先調(diào)用)。

讓我們來看看當(dāng)你嘗試找到一個(gè)不存在的記錄

>> User.find(2) # raises an exception
>> User.find_by_id(2) # nil
>> User.where(id: 2).first # nil

所以這里,很明顯當(dāng)你使用find搜索不存在的記錄時(shí),你會(huì)得到一個(gè)異常。該異常是ActiveRecord :: RecordNotFound,它在生產(chǎn)環(huán)境中呈現(xiàn)404。

總結(jié):find: 根據(jù)id查找,返回一個(gè)對(duì)象
????????????find_by_*: 返回一個(gè)對(duì)象
????????????find_all_by_*:返回Array
????????????where: 返回ActiveRecord::Relation,操作對(duì)象時(shí)才執(zhí)行SQL


4.helper和helper_method究竟做什么?(google的翻譯真的睿智)

helper_method?很簡單:它使部分或全部控制器的方法可用于視圖。

什么是helper?它將輔助方法導(dǎo)入文件或模塊?(也許是名字helper和helper_method相似。他們可能更愿意share_methods_with_view和import_methods_from_view)

自由體會(huì)吧雖然還是云里霧里。


5. || =是什么?

def current_user
?@current_user ||= session[:user_id] && User.find(session[:user_id])
end

這句代碼相當(dāng)于

def current_user
? if @current_use? ?
? ? return @current_user
? ?else
? ? ? if session[:user_id]
? ? ? ? ? @current_user = User.find(session[:user_id])
? ? ? ?else
? ? ? ? ? @current_user = nil
? ? ? ?end
? ? ? ?return @current_user
? ? end
end

代碼意思為:如果@current_user不為空直接返回@current_user。如果@current_user為空,則根據(jù)session中的user_id判斷是否登錄,如果已經(jīng)登錄則查找出用戶信息并返回。如果沒有登錄則返回空。


6.blank?是什么

blank? 相當(dāng)于同時(shí)滿足 .nil? 和 .empty? 。railsAPI中的解釋是如果對(duì)象是:false, empty, 空白字符. 比如說: "", " ", nil , [], 和{}都算是blank。 (object.blank? 相當(dāng)于 object.nil?||object.empty?)。栗子:我相信大家一定都能理解在製作動(dòng)態(tài)功能網(wǎng)站時(shí)類似申請使用者帳號(hào)密碼的場景,密碼字元不能是nil或empty?;虬膊蹇瞻祖I。這在rails裡可以直接整合成blank?()功能喔(真是太方便了?。?/p>


7.config/routes的寫法

在Routes配置文件中,越靠上的一行配置擁有越高的優(yōu)先級(jí)。

對(duì)現(xiàn)階段位的我來說解析的很清楚:https://blog.csdn.net/ysjian_pingcx/article/details/51154488

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 會(huì)話(Session)跟蹤是Web程序中常用的技術(shù),用來跟蹤用戶的整個(gè)會(huì)話。常用的會(huì)話跟蹤技術(shù)是Cookie與Se...
    chinariver閱讀 5,785評(píng)論 1 49
  • 參考: Session Handling Session Functions (一)session session...
    咚門閱讀 1,728評(píng)論 0 7
  • sqlmap用戶手冊 說明:本文為轉(zhuǎn)載,對(duì)原文中一些明顯的拼寫錯(cuò)誤進(jìn)行修正,并標(biāo)注對(duì)自己有用的信息。 ======...
    wind_飄閱讀 2,206評(píng)論 0 5
  • 田英瑞 焦點(diǎn)18期,持續(xù)分享1067天(20180831, 周五)兩個(gè)多月沒上班,雖然也沒少外出,但因?yàn)樘鞜?,更?..
    向陽花開_田英瑞閱讀 607評(píng)論 0 2
  • 京瓷哲學(xué)一直把心靈的純凈作為人最重要的品質(zhì),而在第一章度過美好人生中,也充分說明了稻盛先生對(duì)于人格品質(zhì)的看重。我認(rèn)...
    SSSSSSCREAM閱讀 481評(píng)論 0 3

友情鏈接更多精彩內(nèi)容