本文目錄一覽:
nodejs怎麼設置cookie
var http = require(‘http’);
http.createServer(function (req, res) {
// 獲得客戶端的Cookie
var Cookies = {};
req.headers.cookie req.headers.cookie.split(‘;’).forEach(function( Cookie ) {
var parts = Cookie.split(‘=’);
Cookies[ parts[ 0 ].trim() ] = ( parts[ 1 ] || ” ).trim();
});
console.log(Cookies)
// 向客戶端設置一個Cookie
res.writeHead(200, {
‘Set-Cookie’: ‘myCookie=test’,
‘Content-Type’: ‘text/plain’
});
res.end(‘Hello World\n’);
}).listen(8000);
console.log(‘Server running at ‘);
如果去掉其中幾句,就是官方給出的例子,除了表明返回一個頁面多簡單外,一點用也沒有。
var http = require(‘http’);
http.createServer(function (req, res) {
res.writeHead(200, {‘Content-Type’: ‘text/plain’});
res.end(‘Hello World\n’);
}).listen(8000);
console.log(‘Server running at ‘);
我們通過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]
console.log(‘Server running at ‘);
HttpOnly 屬性: 這是微軟對Cookie做的擴展。如果在Cookie中設置了”HttpOnly”屬性,那麼通過程序(JS腳本、Applet等)將無法讀取到Cookie信息,這樣能有效的防止XSS攻擊。
var http = require(‘http’);
http.createServer(function (req, res) {
// 獲得客戶端的Cookie
var Cookies = {};
req.headers.cookie req.headers.cookie.split(‘;’).forEach(function( Cookie ) {
var parts = Cookie.split(‘=’);
Cookies[ parts[ 0 ].trim() ] = ( parts[ 1 ] || ” ).trim();
});
console.log(Cookies)
// 向客戶端設置一個Cookie
res.writeHead(200, {
‘Set-Cookie’: ‘SSID=Ap4GTEq; Expires=Wed, 13-Jan-2021 22:23:01 GMT;HttpOnly ‘,
‘Content-Type’: ‘text/html’
});
res.end(‘Hello World\nscriptconsole.log(document.Cookie)/script’);
}).listen(8000);
console.log(‘Server running at ‘);
然後多刷幾次頁面,我們發現我們還能在控制台看到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的主機名.主機名是指同一個域下的不同主機,例如:和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天後過期,可以這樣實現:
簡單NodeJS爬蟲和使用cookie進行模擬登錄
NodeJS做爬蟲也是很方便的。因為nodejs有HTTP模塊直接可以使用,而且還有很多簡單粗暴的庫可以即拿即用。
首先,需要的庫文件,
1、superagent 是個輕量的的 http 方面的庫,就像jquery的post,和get一樣,很簡單。
2、cheerio 是一個服務端操作DOM的庫,簡直就是服務端的jquery。
好的,我們需要抓取某個網站的題目。如下圖。這個系統下,及時是遊客狀態也是可以查看題目的,只是答案我們看不到。會顯示我沒有登錄。
現在我們有個需求,先抓取15頁,根據URL的參數可以頁數就是地址中 的P。並且要有本地cookie,獲取cookie的方法,最簡單的是,利用瀏覽器登錄網站之後,在控制台直接打印document.cookie,得到之後,複製進txt文本。用fs模塊讀取並轉換成字符串。在superagent請求時,把cookie傳進去。
好了,控制台已經不輸出“未登錄”,說明已經登錄成功了。
nodejs跨域怎麼獲取cookie
這個沒有辦法獲取到的。
瀏覽器的同源策略,是不允許跨域讀取cookie的。
而Nodejs是服務器端,如果瀏覽器都不允許。服務器自然就獲取不到跨域cookie的信息了。
原創文章,作者:S7E5J,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/128993.html