2012-04-23 94 views
10

我想明白卷曲的四个选项饼干:卷曲 - cookie和session

CURLOPT_COOKIESESSION 
CURLOPT_COOKIEFILE 
CURLOPT_COOKIEJAR 
CURLOPT_COOKIE 

我明白COOKIEJAR是为写入cookie,并COOKIEFILE是为阅读。 那么什么是COOKIESESSIONCURLOPT_COOKIE是自定义的,但是我可以使用它来维护与服务器的会话吗?

+1

是不是第二和第四个相同? – Pheonix 2012-04-23 22:41:34

回答

19

要了解CURLOPT_COOKIESESSION,您需要了解一些关于cookie的内容。 Cookies有发布cookie的网站设置的截止日期。如果cookie的截止日期已过,浏览器/客户端将不会发送它,并且客户端将删除它。如果Cookie设置为NO过期日期,则浏览器应该使用该cookie,直到浏览器会话关闭,或者用户注销并且cookie未被设置。

也就是说,CURLOPT_COOKIESESSION是一种让cURL模拟关闭浏览器的方法。如果COOKIEFILE中有一些会话cookie(没有到期的cookie),它通常会在文件中存在这些cookie。如果您设置了CURLOPT_COOKIESESSION,那么它不会发送任何没有到期日期的cookie。

CURLOPT_COOKIE只是给你一个设置将以原始格式发送到服务器的cookie数据的方法。如果你有一个你想发送的原始HTTP cookie,这很有用。如果没有这个选项,你必须将这些cookie加入COOKIEFILE,或者使用原始值设置一个自定义HTTP标头Cookie:

+0

我需要使用两个需要共享相同会话cookie的独立脚本。所以我想**(1)**开始一个新的会话与服务器,**(2)**维持几个页面的会话(init,set,exec,close),**(3)**关闭脚本。 **(4)**打开新脚本,**(5)**恢复同一会话,**(6)**并关闭并删除Cookie。所以我应该首先使用COOKIESESSION = TRUE,COOKIEJAR = cookiefilename和COOKIEFILE = cookiefilename。 COOKIESESSION = FALSE,COOKIEFILE =脚本1的cookiefilename,只需在脚本2中继续而不需要COOOKIESESSION = TRUE? – Ted 2012-04-23 23:06:43

+0

这取决于登录cookie是否实际上是会话cookie或持久性cookie。如果是后者,比COOKIESESSION无济于事。为了安全起见,您可以在脚本1中开始之前清除cookie文件的内容。或者,您可以通过点击注销url使脚本2实际注销相关站点。我认为在脚本1和脚本2中,我都会指定COOKIEFILE和COOKIEJAR,这样如果script2发出请求时,对cookie的任何修改都会保存到文件中。 COOKIESESSION也默认为false。 – drew010 2012-04-23 23:12:03

+0

他们是顺序的。脚本2完成后,我使用unlink删除cookie文件。我想我可以告诉它这是一个会话cookie由此:PHPSESSID。就这样。我之前说过一个评论,(COOKIESESSION =第一个为真,其余为假)是否为真? – Ted 2012-04-23 23:18:21