Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby rest客户端持久cookie_Ruby_Http_Session_Cookies_Rest Client - Fatal编程技术网

Ruby rest客户端持久cookie

Ruby rest客户端持久cookie,ruby,http,session,cookies,rest-client,Ruby,Http,Session,Cookies,Rest Client,我正在使用rest-clientgem在CLI客户端和服务器之间进行通信。我正在使用cookies来持久化HTTP会话 @cookies = response.cookies ... RestClient.post( :cookies => @cookies) 正如您从代码片段中看到的,cookie在ruby进程中是持久的。我想让它们持久化更长时间(就像浏览器一样) 有没有本地的rest客户端方法可以做到这一点?如果没有,我应该将它们存储在*nix和windows系统的文件系统上的什么位

我正在使用
rest-client
gem在CLI客户端和服务器之间进行通信。我正在使用cookies来持久化HTTP会话

@cookies = response.cookies
...
RestClient.post( :cookies => @cookies)
正如您从代码片段中看到的,cookie在ruby进程中是持久的。我想让它们持久化更长时间(就像浏览器一样)

有没有本地的
rest客户端
方法可以做到这一点?如果没有,我应该将它们存储在*nix和windows系统的文件系统上的什么位置


谢谢

一个解决方案是使用RestClient::Resource

然后你可以打电话给它,cookies就会被持久化

def client(url)
    headers = {
        :accept => :json,
        :content_type => :json,
    }

    cookies = {}
    cookies[SESSION_COOKIE] = @sessionID if @sessionID
    RestClient::Resource.new(url, :headers => headers, :cookies => cookies)
end

要回答您关于将它们存储在何处的问题,这取决于您是否希望它们在会话之后继续存在。如果您只需要短期会话,内存是存储它们的理想场所。

您可以使用一些外部存储方法,如或来实现您的目标,或者只需使用一堆文件来存储cookie(就像浏览器一样)

如果您使用redis或memcached,则可以使用域名作为密钥。 如果是文件,则只需使用域名作为文件名,并将cookie存储到这些文件中。 无论哪种方式,都应该将cookie哈希序列化为字符串(例如JSON)。您可以选择将cookie字符串转换为Base64以防止肩部黑客攻击,或者使用RSA对其进行加密以提高安全性并降低性能成本