我正在开发一个需要javascript和会话的页面.如果禁用了javascript,我已经有代码警告用户.现在,我想处理禁用cookie的情况,因为会话ID存储在cookie中.
我想到了几个想法:
解决这个问题的最佳方法是什么?谢谢
编辑
根据链接的文章,我提出了自己的方法,并认为我会分享,其他人可能会使用它,也许我会得到一些批评.(假设您的PHP会话存储在名为的cookie中PHPSESSID)
<div id="form" style="display:none">Content goes here</div>
<noscript>Sorry, but Javascript is required</noscript>
<script type="text/javascript"><!--
if(document.cookie.indexOf('PHPSESSID')!=-1)
document.getElementById('form').style.display='';
else
document.write('<p>Sorry, but cookies must be enabled</p>');
--></script>
Run Code Online (Sandbox Code Playgroud) PHP中的Sessions和Cookies有什么区别?
我已将.ASPXAUTH cookie设置为仅https,但我不确定如何使用ASP.NET_SessionId有效地执行相同操作.
整个站点使用HTTPS,因此cookie不需要同时使用http和https.
我在一个应用程序中工作,我需要在用户登录期间保留一些数据,我有这个问题,localStorage,sessionStorage,cookies有什么区别???
我问我可以使用什么来保存DOM中的一些数据,即使用户刷新页面,有些人说:使用sessionStorage或localStorage,然后,有人提出使用ngCookies的想法因为它可以工作每个浏览器,但是,我应该使用哪个?
我们在应用程序中有一个简单的性能测试流程.
我们正在使用Jmeter进行性能测试.我们需要运行多个线程以可伸缩的方式对其进行测试.
我们目前安排的方式是:
-Test Plan
- Thread Group
- Cookie Manager
- Login To application
- Search on param 1
- Search on param 2
- results summary table
- Summary report
Run Code Online (Sandbox Code Playgroud)
因此,基本上我们在计划级别上有汇总返回表和报告,而cookie管理器存在于线程组级别.
当我为一个线程运行时,它运行良好并且完成得很好.当我将它扩展到多个线程时,一旦下一个线程启动,最后一个线程的会话就会失效.由于新生成的线程,这会导致所有已经运行的线程出现故障.
我通过观察得出了这个结果:
1.如果我运行多个线程,只有最后一个线程在结果摘要树
2中得到了有效的响应
.如果我运行2个线程,加速周期为10秒,这意味着每个线程都有时间完成本身,然后他们都成功运行.
根据我的理解,每个线程登录到应用程序,并且由于cookie管理器处于线程级别,因此将分别为每个线程的会话ID维护这些值?但是什么导致线程之间的会话id值被覆盖?
任何帮助都感激不尽.
关于cookies如何与Scrapy一起工作,以及如何管理这些cookie,我有点困惑.
这基本上是我正在尝试做的简化版本:

当您访问该网站时,您将获得一个会话cookie.
当您进行搜索时,网站会记住您搜索的内容,因此当您执行类似于进入下一页结果的操作时,它会知道它正在处理的搜索.
我的蜘蛛有一个searchpage_url的起始网址
请求parse()搜索页面,并将搜索表单响应传递给search_generator()
search_generator()那么yield很多搜索请求使用FormRequest和搜索表单响应.
每个FormRequests和后续子请求都需要拥有自己的会话,因此需要拥有自己的cookiejar和自己的会话cookie.
我已经看到了文档的一部分,它讨论了一个阻止cookie被合并的元选项.这究竟意味着什么?是否意味着提出请求的蜘蛛将在其余生中拥有自己的cookiejar?
如果cookie是按蜘蛛级别进行的,那么当生成多个蜘蛛时它是如何工作的?是否有可能只使第一个请求生成器产生新的蜘蛛,并确保从那时起只有该蜘蛛处理未来的请求?
我假设我必须禁用多个并发请求..否则一个蜘蛛会在同一会话cookie下进行多次搜索,未来的请求只会涉及最近的搜索?
我很困惑,任何澄清都会受到极大的欢迎!
我刚才想到的另一个选择是完全手动管理会话cookie,并将其从一个请求传递到另一个请求.
我想这意味着禁用cookie ..然后从搜索响应中获取会话cookie,并将其传递给每个后续请求.
这是你在这种情况下应该做的吗?
文档ActionDispatch::Cookies为签名cookie和加密cookie提供了几乎相同的描述.它似乎都用于secrets.secret_key_base防止客户端篡改.http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html
设置已签名的cookie,以防止用户篡改其值.Cookie由您应用的
secrets.secret_key_base价值签名.可以使用signed方法读取它cookies.signed[:name]
cookies.signed[:user_id] = current_user.id
Run Code Online (Sandbox Code Playgroud)
在将加密的cookie值发送到客户端之前设置它,以防止用户读取和篡改其值.Cookie由您应用的
secrets.secret_key_base价值签名.可以使用加密方法读取它cookies.encrypted[:name]
cookies.encrypted[:discount] = 45
Run Code Online (Sandbox Code Playgroud)
我的问题是:两者有什么区别?
你什么时候想要使用另一个?
我有一个关于网址的问题:
我已经阅读了RFC 3986,但仍然有一个关于一个URL的问题:
如果URI包含权限组件,则路径组件
必须为空或以斜杠("/")字符开头.如果URI不包含权限组件,则路径不能
以两个斜杠字符("//")开头.此外,URI引用
(第4.1节)可以是相对路径引用,在这种情况下,
第一个路径段不能包含冒号(":")字符.ABNF
需要五个单独的规则来消除这些情况的歧义,其中只有一个与给定URI引用中的路径子字符串匹配.我们使用通用术语"路径组件"来描述
解析器与其中一个规则匹配的URI子字符串.
我知道,这//server.com:80/path/info是有效的(它是一个架构相对URL)
我也知道这http://server.com:80/path//info是有效的.
但我不确定以下一个是否有效:
http://server.com:80//path/info
Run Code Online (Sandbox Code Playgroud)
我的问题背后的问题是,http://server.com:80//path/info当URI http://server.com:80/path/info由限制创建时,不会发送cookie/path
我和乘客在轨道4上.一切都很顺利,直到我bundle刚才做了.现在我遇到以下错误:
Web application could not be started
uninitialized constant ActionDispatch::Session::EncryptedCookieStore (NameError)
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/bundler/gems/rails-2ac97df55230/railties/lib/rails/application/configuration.rb:144:in `const_get'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/bundler/gems/rails-2ac97df55230/railties/lib/rails/application/configuration.rb:144:in `session_store'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/bundler/gems/rails-2ac97df55230/railties/lib/rails/application.rb:345:in `block in default_middleware_stack'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/bundler/gems/rails-2ac97df55230/railties/lib/rails/application.rb:307:in `tap'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/bundler/gems/rails-2ac97df55230/railties/lib/rails/application.rb:307:in `default_middleware_stack'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/bundler/gems/rails-2ac97df55230/railties/lib/rails/engine.rb:494:in `app'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/bundler/gems/rails-2ac97df55230/railties/lib/rails/application/finisher.rb:34:in `block in <module:Finisher>'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/bundler/gems/rails-2ac97df55230/railties/lib/rails/initializable.rb:30:in `instance_exec'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/bundler/gems/rails-2ac97df55230/railties/lib/rails/initializable.rb:30:in `run'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/bundler/gems/rails-2ac97df55230/railties/lib/rails/initializable.rb:55:in `block in run_initializers'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/tsort.rb:150:in `block in tsort_each'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/tsort.rb:183:in `block (2 levels) in each_strongly_connected_component'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/tsort.rb:219:in `each_strongly_connected_component_from'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/tsort.rb:182:in `block in each_strongly_connected_component'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/tsort.rb:180:in `each'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/tsort.rb:180:in `each_strongly_connected_component'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/tsort.rb:148:in `tsort_each'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/bundler/gems/rails-2ac97df55230/railties/lib/rails/initializable.rb:54:in `run_initializers'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/bundler/gems/rails-2ac97df55230/railties/lib/rails/application.rb:214:in `initialize!'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/bundler/gems/rails-2ac97df55230/railties/lib/rails/railtie/configurable.rb:30:in `method_missing'
/opt/ptolemy-web/config/environment.rb:5:in `<top (required)>'
config.ru:3:in `require'
config.ru:3:in `block in <main>'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `instance_eval'
/u/sf/ytl/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `initialize' …Run Code Online (Sandbox Code Playgroud) 几天来,我一直在为单页面应用程序寻找安全的身份验证和会话管理机制.从有关SPA和身份验证的众多教程和博客文章来看,将JWT存储在localStorage或常规cookie中似乎是最常用的方法,但将JWT用于会话并不是一个好主意因此它不是这个应用程序的选项.
要求
理想的机制似乎是使用HttpOnly包含会话ID的cookie进行基于cookie的身份验证.流程将如下工作:
HttpOnly响应cookie 发送.withCredentials选项.因为cookie具有HttpOnly标志,JavaScript将无法读取其内容,因此只要通过HTTPS传输,它就不会受到攻击.
挑战
这是我遇到的具体问题.我的服务器配置为处理CORS请求.在对用户进行身份验证后,它会在响应中正确发送cookie:
HTTP/1.1 200 OK
server: Cowboy
date: Wed, 15 Mar 2017 22:35:46 GMT
content-length: 59
set-cookie: _myapp_key=SFMyNTYBbQAAABBn; path=/; HttpOnly
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: qi2q2rtt7mpi9u9c703tp7idmfg4qs6o
access-control-allow-origin: http://localhost:8080
access-control-expose-headers:
access-control-allow-credentials: true
vary: Origin
Run Code Online (Sandbox Code Playgroud)
但是,浏览器不保存cookie(当我检查Chrome的本地cookie时,它不存在).因此,当以下代码运行时:
context.axios.post(LOGIN_URL, creds).then(response => {
context.$router.push("/api/account")
}
Run Code Online (Sandbox Code Playgroud)
并创建帐户页面:
created() {
this.axios.get(SERVER_URL + "/api/account/", {withCredentials: true}).then(response => {
//do stuff
} …Run Code Online (Sandbox Code Playgroud)