注意:由于显而易见的原因,我已将会话ID的最后5个字符替换为“x”
我在抓一个网站。我可以在浏览器中看到,登录设置了一个名为MyClass
的cookie值。没问题,我可以抓一点:
PHPSESSID
返回:
superagent
.post(loginUrl)
.send(loginDetails)
.end(function(err, res){
var setCookieValue = res.headers['set-cookie'][0]
var sessionID = cookieParser.parse(setCookieValue).PHPSESSID
console.log(sessionID)
它看起来像一个PHP会话ID。大!现在使用会话ID:
37c3bog3tf6erp2i6ss5vxxxxx
将我重定向到登录页面。但我从浏览器手动获取的会话ID,格式完全相同,工作正常:
superagent
.get(loggedInURL)
.set('Cookie', 'PHPSESSID'=sessionID)
.end(err, res)
将使用登录用户的完整HTML返回loggedInURL。
为什么我正在抓取会话ID?
会话ID中没有任何内容在工作代码和非工作代码之间有所不同。
可能有什么不同?
答案 0 :(得分:2)
PHP有一些dubious extra security for sessions,例如checking Referer
。
某些网站可能还有check User-Agent
。
答案 1 :(得分:1)
您可以尝试在对GET和POST的superagent调用的标题中抛出不同的user-agent属性:
.set('User-Agent','Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0')
答案 2 :(得分:0)
您的代码看起来好像没有用实际的sessionID值替换字符串“sessionID”...
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.13.1/jquery.validate.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.13.1/additional-methods.min.js"></script>
<form id="test">
<input type="text" name="alphanumdash" /><br/>
<input type="submit" />
</form>
应该是这样的吗?
superagent
.get(loggedInURL)
.set('Cookie', 'PHPSESSID=sessionID')
.end(err, res)
我想......