鍍金池/ 問(wèn)答/PHP  C  Linux/ 如何決定 session 時(shí)間?

如何決定 session 時(shí)間?

想請(qǐng)問(wèn)一下
我在 php.ini 設(shè)定session是存在86400
但能不能讓他永久?
應(yīng)該是說(shuō)我可以在網(wǎng)頁(yè)上決定他多長(zhǎng),不會(huì)被php.ini 限制,那我php.ini 要怎麼設(shè)定呢?網(wǎng)頁(yè)上要怎麼設(shè)定呢?

回答
編輯回答
笑忘初

你在php.ini 里面把 session.cookie_lifetime 和 session.gc_maxlifetime設(shè)置的超大就行,例如999999999

2017年12月2日 18:14
編輯回答
安淺陌

你設(shè)置了 php.ini 的 session 時(shí)間,我覺(jué)得確實(shí)生效了。
你會(huì)發(fā)現(xiàn),有些網(wǎng)站登錄賬號(hào),你兩個(gè)小時(shí)沒(méi)有操作,掛著網(wǎng)頁(yè),再操作時(shí)會(huì)讓你重新登錄,這個(gè)才是 session 的有效期,你設(shè)置的 86400 只是這個(gè)時(shí)間。
而你說(shuō)的過(guò)期則是另外一種過(guò)期:
你第一次訪問(wèn)頁(yè)面,得到一個(gè) session_id 0x01,而你關(guān)閉了瀏覽器,重新訪問(wèn)頁(yè)面,由于 http 是無(wú)狀態(tài)的,所以會(huì)重新分配一個(gè) session_id 0x02 給你,實(shí)際上你第一次訪問(wèn)獲得的 0x01 還沒(méi)有過(guò)期,只是因?yàn)槟惝?dāng)前的session_id變成了0x02


評(píng)論回復(fù)不能保持格式,在這里加一下

想要無(wú)限延長(zhǎng),可以這樣做(laravel就是這樣做的)

  1. 用戶表增加一個(gè)字段 remeber_token
  2. 當(dāng)用戶登錄成功時(shí),生成一個(gè)隨機(jī)字符串存入用戶表的 remeber_roken,并返回給前端
  3. 前端把返回的 remeber_token 存入本地,試過(guò) h5 的 localStore,或者其他。能永久存儲(chǔ)的。
  4. 當(dāng)用戶再打開(kāi)頁(yè)面,session 過(guò)期要去登錄時(shí),直接判斷 js 本地是否存儲(chǔ)了remeber_token ,
  5. 如果有發(fā)送請(qǐng)求后臺(tái),后臺(tái)請(qǐng)求數(shù)據(jù)庫(kù)匹配出用戶并登錄

4.5 無(wú)限循環(huán)達(dá)到永久登錄
清楚瀏覽器緩存會(huì)失效,只能重新登錄

2017年3月24日 04:20
編輯回答
檸檬藍(lán)
2017年12月4日 09:24
編輯回答
初心

如果想突破單純的session限制,可以不考慮用php的session,直接把起始時(shí)間戳存入數(shù)據(jù)庫(kù),然后自定義過(guò)期時(shí)間3年,5年,10年... 是這個(gè)意思嗎?

2018年7月29日 21:50
編輯回答
貓館

存入reids

2018年5月24日 09:10
編輯回答
苦妄

經(jīng)過(guò)和你的交流過(guò)程,我來(lái)做一下回答,上面他們的回答我也看了,也具有一定的道理,要做到你說(shuō)的這個(gè)無(wú)限延時(shí)也可以做到,那么我站在安全性的角度來(lái)和你交流這個(gè)東西,雖然來(lái)說(shuō)不一定全部正確,或者是有些地方考慮不夠周到。

一般來(lái)說(shuō),你在瀏覽器上存一個(gè)cookie,cookie可以是一個(gè)token或者是key什么的,這個(gè)cookie過(guò)期時(shí)間設(shè)置為一個(gè)周或者24小時(shí),如果用戶在這個(gè)期間沒(méi)有訪問(wèn),那么就讓這個(gè)用戶重新登錄。在數(shù)據(jù)庫(kù)中的用戶表也用一個(gè)字段來(lái)記錄這個(gè)token,每次對(duì)比一下,如果數(shù)據(jù)表中存在這個(gè)token,且數(shù)據(jù)表中設(shè)置的過(guò)期時(shí)間滿足,則創(chuàng)建一個(gè)新的token存到瀏覽器,然后再以設(shè)置的時(shí)候?yàn)殚_(kāi)始時(shí)間再計(jì)算出一個(gè)有效期,這樣子的話,只要用戶在指定的時(shí)間訪問(wèn)平臺(tái),讓用戶感覺(jué)是沒(méi)有退出登錄的,而用戶退出后超出一段時(shí)間沒(méi)登錄,就重新發(fā)起登陸,防止別人拿到這個(gè)token了就可以一直模擬這個(gè)用戶訪問(wèn)這個(gè)用戶的數(shù)據(jù)資料或者操作這個(gè)用戶的數(shù)據(jù)。

而刷新token的作用主要就是防止別人拿到cookie就可以模擬這個(gè)用戶登陸,而同時(shí)又可以保持用戶不會(huì)退出登錄,相當(dāng)于做了一道安全措施。

其他的相關(guān)想法歡迎探討

2018年4月27日 08:28