iT邦幫忙

0

關於用Session實作會員登入的問題

  • 分享至 

  • xImage

大家好

我有一個登入系統(Nodejs+MySQL),看著下面連結的教學做的
https://www.youtube.com/watch?v=1aXZQcG2Y6I&list=PL0EEIby1kQJtTVoh0Es2Xp4bNoHLjSOZQ&index=1

假如我開兩個網頁,然後分別進行登入

  • 網頁(一)登入:Alice
  • 網頁(二)登入:Bob

網頁(二)登入完之後,如果在網頁(一)的首頁重新整理,它就會變成登入的是Bob

參考圖(先登入Alice後再從另一個頁面登入Bob):
https://ithelp.ithome.com.tw/upload/images/20220618/20147232sqzNDavud2.png

回到原本頁面重新整理後
https://ithelp.ithome.com.tw/upload/images/20220618/20147232MJ5j5NGOep.png

有沒有甚麼方法,可以讓兩個網頁分別不會受影響?

謝謝!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
㊣浩瀚星空㊣
iT邦大神 1 級 ‧ 2022-06-20 18:50:35
最佳解答

這點你其實要先了解一件事。
所謂的SESSION是什麼,如何分別。

SESSION的值認真來說,都是存在你的伺服器上。
而大多數來說。session id用的方式就是存在cookie

然後我們再來談談 cookie ,原則上cookie是依附在域名下所產生的值。
並儲存在客戶的機器上。
也就是說,再同域名下,所拿到的都是同一個cookie設定。

所以,當你在同一個域名下,去做兩個不同的登入。一定會是後者資料蓋前者資料的。
畢竟它們是共用同一個設定值的。

那是否有解呢??其實有很多種方式的。
我們已經知道session id的值會是放在cookie上。
所以我們得先處理好如何區分不同的session id值

大多數以前比較簡單的方式是,跟隨token招。
也就是域名採用 http://www.abc.com/index.php?token=???????
用token的分式來處理分身及應用。
但這招則需要在連個連結中都要帶其值來對應。要不然就無法區分了。
至於安全性,理論上來說當然不是很安全。除非你針對token做一些處理。但這是另外一門學問了。

另外一招就是採用 瀏覽器的storage來處理了。你可以查一下storage。
現在同域名不同分身,大多會直接用它處理。

以上提供這幾項給你參考。當然了,其實還有非常多招。你可以網路上找找玩一下。

了解~感謝回覆

1
jellyalex978
iT邦新手 4 級 ‧ 2022-06-20 08:28:04

我推測你大概還不清楚 seasion 的目的 XD
你目前的狀況是正確的,大家都是這樣的
你的問題你只需要用不同瀏覽器,或是其中一個換成無痕,就可以測試了

session 或 cookie 這類暫存用的功能
本來就是為了要讓使用者不用
換頁還要重新登入

舉例吧
你希望每次開新分頁,都要重新登入 gmail 嗎
或是每次開新分頁都要重新登入 IG 嗎
沒有人會這樣設計的對吧
所以你在同一個階段,登入自己網站
當然不管開幾個分頁都是同一個人
一旦你換帳號登入,當然全部頁面都要換另一個人

如果你有需求像 fb 粉絲團
或 gmail 多帳號登入切換

那你就要再額外 code 能夠做帳號切換的功能和判斷

了解~感謝回覆

1
japhenchen
iT邦超人 1 級 ‧ 2022-06-20 11:52:39

session跟cookies 類似,都是以瀏覽器header request和response的短期資料存放使用,出於安全考量,盡可能不存放敏感資料,如信用卡號,實名、身份証號,而是一組隨機產生的GUID或加密字串做token,取代明顯文字或可被逆算的chipher加密,只為了做驗證這個用戶是有登入過的
至於token代表什麼,你就存資料庫吧

了解~感謝回覆

1
ronrun
iT邦新手 4 級 ‧ 2022-06-21 14:42:57

假如我開兩個網頁,然後分別進行登入

你開的根本就是同一頁,路徑相同,開了兩頁,同一套程式在處理。你說的應該是前後台的功能。前台登入,叫會員,後台登入,叫管理者。網址路徑要不一樣,由不同的程式去處理,變數也要取不一樣。這個對初學者可能有點複雜。

了解~感謝回覆

我要發表回答

立即登入回答