簡體   English   中英

PHP會話和唯一用戶令牌

[英]PHP Sessions and Unique User Tokens

我正在嘗試在PHP中實現類似OAuth的功能,而我想做的就是向用戶提供令牌,以便他們可以使用其私有資源。 每個用戶首​​先必須使用他們的電子郵件和密碼登錄並獲得唯一的令牌,該令牌將永遠有效,除非它空閑了“ n”分鍾。 因此,如果在“ n”分鍾內的請求為零,則令牌應被銷毀。 令牌將被用戶用來訪問私有資源。

我可以想到的一件事是...

我將維護一個名為user_tokens的數據庫表,當他們使用其用戶名和密碼登錄時,將在此處創建具有唯一令牌的條目。 將設置最后一次訪問的時間戳,並且用戶將給出唯一令牌作為響應。 現在,令牌可以用於訪問用戶的私有資源,並且需要與所有需要令牌的請求一起傳遞。 每個私有請求都將檢查最后一個時間戳和當前時間戳是否相差“ n”分鍾,如果是,則銷毀令牌。 否則,發送帶有請求資源的響應,並將上一個時間戳設置為當前時間戳。

那有意義嗎? 還是可以有另一種有效的方法來做到這一點?

我想補充一點,令牌必須類似於twitter或facebook從其API返回的內容。

在使用session_regenerate_id之前,我正在使用session_id生成令牌,但我發現使用session_id不會使sessID更改值,然后重新生成它是適合我的解決方案。

現在,我什至可以控制是否有相同的用戶,但擁有不同的sessID,並提供注銷一個用戶的會話的選項。

我不知道這是否正是您要尋找的東西,但是它解決了我關於TOKEN的問題。 而且它永遠不會重復。

參考: https : //www.php.net/manual/zh/function.session-regenerate-id.php

如果您希望使用庫來實現OAuth,則應查看Digg [1]的Jeff Hodson的HTTP_OAuth pear軟件包,該站點上有很多關於OAuth [2]的數據庫設計的好文章。

不過,我想我對您的問題感到困惑。 您是要為Web應用程序創建API,還是只是提供一種保護用戶資源的方法? 如果要創建API,則一定要使用OAuth並使用眾所周知的庫。 這樣做將確保:

  1. 其他開發人員將知道如何使用您的API,因為它遵循OAuth RFC [3]
  2. 您的Web應用程序更可能是安全的
  3. 您會了解最佳做法並學習一些新知識

如果您不打算制作API,而只是想保護用戶資源,我認為使用session [4]是安全的,並且,如果用戶未登錄,他們將無法訪問受保護的資源。

[1] HTTP_OAuth軟件包: http ://pear.php.net/pepr/pepr-proposal-show.php?id=607
[2] Oauth數據庫設計: OAuth Provider推薦的數據庫結構是什么
[3] Oauth RFC: http://oauth.net/http://oauth.net/
[4] PHP會話: http://us2.php.net/manual/en/features.sessions.phphttp://us2.php.net/manual/en/features.sessions.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM