導航:首頁 > 編程語言 > nodejs操作cookies

nodejs操作cookies

發布時間:2025-04-09 17:49:06

① 求問nodejs如何實現一個網頁根據不同的點擊跳轉到另外一個網頁

可以直接使用 瀏覽抄器js實現,也可以通過伺服器來實現。
瀏覽器端js, 將跳轉鏈接後面加上你的數據如:
xxxx.com/test?a=1
xxxx.com/test?a=2
xxxx.com/test?a=3
。然後解析 /test的url, 獲取方式 console.log(window.location) 就知道了

後台實現方式, 通過req 獲取查詢參數,類似req.params ,這取決你用的框架是什麼,expres,koa還是自己的原生request, 然後通過模板引擎,ejs 也好,handbar 或者其他方式 將原html帶數據編譯好後 寫入html到response中,返回給客戶端

② NodeJS 操作cookie

本文旨在深入探討NodeJS操作cookie的實用技巧,讓開發者在實際項目中能夠更靈活地運用cookie進行用戶認證和狀態管理。

cookie作為前端存儲數據的一種手段,在瀏覽器中占據著重要地位,盡管LocalStorage和SessionStorage逐漸流行,但cookie仍有其獨特價值。

其容量有限,僅為5KB,且以字元串形式存儲,但正是這種特性使其在處理簡單數據時顯得得心應手。

在NodeJS中,通過http模塊的createServer(fn)方法創建服務時,可以利用res.setHeader()方法來設置cookie。

設置cookie的流程簡潔明了:首先,使用res.setHeader('Set-Cookie', 'key1=value1')來定義cookie的key和value,然後通過res.end()結束響應。

為了保持登錄狀態的持久性,通常會將登錄信息相關的cookie設置為路徑為'/',確保所有請求都攜帶登錄信息。

為了讓cookie無法被前端直接訪問和修改,可以設置httpOnly屬性,限制其只在服務端操作,進一步增強安全性。

對於需要設置過期時間的場景,可以利用expires參數來實現。例如,通過設置expires為一個包含日期的字元串,即可實現1天後的過期。

在NodeJS中獲取cookie,可以通過req對象直接訪問。獲取到的cookie是一段格式化的字元串,可以通過簡單解析將其轉換為對象,方便後續操作。

掌握NodeJS操作cookie的關鍵在於理解其基本設置方法、路徑配置、安全性設置以及過期時間的管理,這些技巧對於構建穩定、安全的後端系統至關重要。

推薦閱讀相關文章,深入學習NodeJS的其他實用技能,如http請求、連接MySQL、使用免費在線API介面等。

通過不斷實踐和探索,將點贊、關注、收藏作為學習的起點,你會發現NodeJS操作cookie帶來的便利與強大功能。

③ nodejs怎麼設置cookie

通過node.js建立了一個完整的網站不是一件容易的事,這涉及讀取頁面模板,從資料庫中抽出數據構建成新的頁面返回給客戶端。但光是這樣還不行,我們還要設置首部,在chrome中如果CSS沒有設置正確的Content-Type,會不起作用的。此處理還要考慮訪問量,要設置緩存,緩存不單單是把東西從內存中讀入讀出就行,這樣會撐爆電腦內存的,這用LRU演算法(最近最少用的數據會清空出內存)。基於Cookie與資料庫與URL重寫,我們發展出一個session機制用於在多個action中通信。對於不同的請求交由不同的action來處理,就要發展出路由機制與MVC系統,等等。我信後寫這些東西一點點寫出來,揭示newland.js中遇到的種種問題與解決方案。如果什麼都貪圖方便,直接上框架,對我們語言學習是非常不利的。

本文正如標題所說,是操作Cookie。下面是一個完整的例子:

varhttp = require('http');http.createServer(function(req, res) {// 獲得客戶端的CookievarCookies = {};req.headers.cookie && req.headers.cookie.split(';').forEach(function( Cookie ) {varparts = Cookie.split('=');Cookies[ parts[ 0 ].trim() ] = ( parts[ 1 ] || '').trim();});console.log(Cookies)// 向客戶端設置一個Cookieres.writeHead(200, {'Set-Cookie': 'myCookie=test','Content-Type': 'text/plain'});res.end('Hello World ');}).listen(8000);console.log('Server running at http://127.0.0.1:8000/');

如果去掉其中幾句,就是官方給出的例子,除了表明返回一個頁面多簡單外,一點用也沒有。

varhttp = require('http');http.createServer(function(req, res) {res.writeHead(200, {'Content-Type': 'text/plain'});res.end('Hello World ');}).listen(8000);console.log('Server running at http://127.0.0.1:8000/');

我們通過http.createServer的回調來處理所有請求與響應,因此什麼有用的東西都在它們上面。Cookie位於req對象的headers對象上,為一個字元串,通常為了方便我們將它們轉換成一個對象。

寫入一個Cookie其實就是在首部設置一個鍵值對,上面是簡單方式,它實際上可以這樣:

res.writeHead(200, {'Set-Cookie': ["aaa=bbb","ccc=ddd","eee=fff"],'Content-Type': 'text/plain'});

但真正使用時,我們的Cookie並非這樣簡單的的格式:

Set-Cookie: =[; =][; expires=][; domain=][; path=][; secure][; HttpOnly]

HttpOnly 屬性: 這是微軟對Cookie做的擴展。如果在Cookie中設置了"HttpOnly"屬性,那麼通過程序(JS腳本、Applet等)將無法讀取到Cookie信息,這樣能有效的防止XSS攻擊。

varhttp = require('http');http.createServer(function(req, res) {// 獲得客戶端的CookievarCookies = {};req.headers.cookie && req.headers.cookie.split(';').forEach(function( Cookie ) {varparts = Cookie.split('=');Cookies[ parts[ 0 ].trim() ] = ( parts[ 1 ] || '').trim();});console.log(Cookies)// 向客戶端設置一個Cookieres.writeHead(200, {'Set-Cookie': 'SSID=Ap4GTEq; Expires=Wed, 13-Jan-2021 22:23:01 GMT;HttpOnly ','Content-Type': 'text/html'});res.end('Hello World <script>console.log(document.Cookie)</script>');}).listen(8000);console.log('Server running at http://127.0.0.1:8000/');

然後多刷幾次頁面,我們發現我們還能在控制台看到SSID=Ap4GTEq這個屬性,但在前端我們看不到它(當然在firebug中能看到)。

Secure屬性: 當設置為true時,表示創建的 Cookie 會被以安全的形式向伺服器傳輸,也就是只能在 HTTPS 連接中被瀏覽器傳遞到伺服器端進行會話驗證,如果是 HTTP 連接則不會傳遞該信息,所以不會被竊取到Cookie 的具體內容。同上,在客戶端我們也無法在document.Cookie找到被設置了Secure=true的Cookie鍵值對。Secure屬性是防止信息在傳遞的過程中被監聽捕獲後信息泄漏,HttpOnly屬性的目的是防止程序獲取Cookie後進行攻擊。我們可以把Secure=true看成比HttpOnly更嚴格的訪問控制。

path屬性: 指定可訪問Cookie的目錄。例如:"userId=320; path=/shop";就表示當前Cookie僅能在shop目錄下使用。

domain屬性: 指定可訪問Cookie的主機名.主機名是指同一個域下的不同主機,例如:www.google.com和gmail.google.com就是兩個不同的主機名。默認情況下,一個主機中創建的Cookie在另一個主機下是不能被訪問的, 但可以通過domain參數來實現對其的控制,其語法格式為:"name=value; domain=CookieDomain";以google為例,要實現跨主機訪問,可以寫為: "name=value;domain=.google.com";這樣,所有google.com下的主機都可以訪問該Cookie。

Expires屬性:指定過期時間,格式為"name=value;; expires=GMT_String"; 其中GMT_String是以GMT格式表示的時間字元串,超過這個時間,Cookie將消失,不可訪問。例如:如果要將Cookie設置為10天後過期,可以這樣實現:

//獲取當前時間vardate=newDate();varexpireDays=10;//將date設置為10天以後的時間date.setTime(date.getTime()+expireDays*24*3600*1000);//將userId和userName兩個Cookie設置為10天後過期res.writeHead(200, {'Set-Cookie': "userId=828; userName=hulk; expire="+date.toGMTString();'Content-Type': 'text/html'});

Max-Age屬性: 個人感覺這個東西比Expires更好用,本來就是用於代替Expires,由於市面上的書你抄我,我抄你,都在抄舊知識,導致Expires還在使用。Max-Age的值 可以為正數,表示此Cookie從創建到過期所能存在的時間,以秒為單位,此Cookie會存儲到客戶端電腦,以Cookie文件形式保存,不論關閉瀏覽器或關閉電腦,直到時間到才會過期。 可以為負數,表示此Cookie只是存儲在瀏覽器內存里,只要關閉瀏覽器,此Cookie就會消失。maxAge默認值為-1。 還可以為0,表示從客戶端電腦或瀏覽器內存中刪除此Cookie。

Cookie面向的主要是伺服器,localstorage面向的是頁面端js。頁面所需的業務數據可以放在localstorage里,但是認證相關的信息還是需要放在Cookie里的。

Cookie的限制

一、瀏覽器允許每個域名所包含的 Cookie 數:

④ nodejs怎麼獲取它所在機器的locale和字元編碼

列印頭信息就可以了,因為nodejs是基於HTTP流編程的,
在頭信息中找到Accept-Language就是當地的瀏覽器設備支持的編碼了。
這個說應該明白了吧

閱讀全文

與nodejs操作cookies相關的資料

熱點內容
u盤文件給刪了 瀏覽:737
vuejsoauth2 瀏覽:78
2017微信支付日 瀏覽:81
機械臂編程如何開發 瀏覽:21
標書U盤PDF文件要不要簽字 瀏覽:222
ps軟體文件復制到d盤 瀏覽:148
一般工業固廢招標文件內容 瀏覽:583
網站建設報價怎麼算 瀏覽:66
三星a7000升級安卓502 瀏覽:486
word2010清除分隔符 瀏覽:781
樂視怎麼切換網路 瀏覽:425
cad列印pdf文件名稱與cad不一致 瀏覽:815
電氣與可編程式控制制是什麼 瀏覽:67
文件名中允許使用英文豎線嗎 瀏覽:531
編程貓在哪裡 瀏覽:775
win8共享文件夾訪問許可權 瀏覽:380
cad文件顯示為只讀不能保存怎麼辦 瀏覽:703
如何在系統里忘記網路 瀏覽:24
中小企業出口數據在哪裡找 瀏覽:715
win8和xp傳文件 瀏覽:75

友情鏈接