为了账号安全,请及时绑定邮箱和手机立即绑定

session (cookies flash) 的本质是什么?

session (cookies flash) 的本质是什么?

侃侃尔雅 2019-04-19 16:13:13
这个问题并不是代码或异常方面的问题,而是理解方面的问题(我在网上查了相关问题,都是使用或用途方面的)。如果这其中有我个人知识边界上的缺陷,或者大家觉得要把这个问题讲清楚会很绕,我很抱歉打扰大家,这个问题不论是问还是答都会很绕,如果大家能为我解释清楚,非常感谢。我在学习RORtutorial这套教程中知道如何使用cookies和session,可是我并不明白这两个东东的实质,我并不是说它们用来干什么,而是它们是什么,tutorial只说它们是对象。在用户登录这一节,写sign_in方法的时候,特别说明self.current_user这里一定要加self,如果写成current_user=user,解释器会把它理解为一个局部变量的赋值,那么其它地方就使用不了current_user(自己的理解),所以self.current_user=user这句实际上不是一个赋值,而是一个方法调用,是调用了current_user=(user)这个赋值方法,而最终本质是,给@current_user这个实例变量赋值,这句用以下三个注释中的任何一句代替都是等价的。defsign_in(user)remember_token=User.new_remember_tokencookies.permanent[:remember_token]=remember_tokenuser.update_attribute(:remember_token,User.hash(remember_token))#self.current_user=user#current_user=(user)#@current_user=usercurrent_user=(user)end那么,相对于current_user,cookies和session是什么呢,它们也可以在其它方法中调用(如下面平日练习代码),那么它们一定不是局部变量,但它们应该也不是实力变量,因为它们前面没有@,Tutorial里说它们是对象,那它们应该是某个类的实例,就像@user=User.new但它们前面没有@,那会不会类似user=User.new但这个实例化的对象赋给了一个局部变量,那么他应该是不能在其它方法中使用的,但如下代码所示,它们可以在其它方法中使用。后来我查了RailsAPI,API的解释如下,其实这个定义的方法我也不太懂,不过我理解到(不知是否正确)session其实是个方法,是个类current_user这样的,可以赋值,可以取值,但是session[:return_to]这样的写法又让我迷惑了,如果是方法的话还可以这样写么,如果是hash对象就可以这样写,但如果十个hash变量,这就是个局部的,其它方法就不能调用了(我这样理解),所以我觉得很疑惑,session和cookies这类东西本质是什么,虽然我会用,但是理解上很模糊session()LinkSource:hide|onGitHub#Fileactionpack/lib/action_dispatch/testing/test_process.rb,line13defsession@request.sessionend#平日练习里的代码defredirect_back_or(default)redirect_to(session[:return_to]||default)session.delete(:return_to)enddefstore_locationsession[:return_to]=request.fullpathifrequest.get?end
查看完整描述

2 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

相对于current_user,cookies和session是什么呢?
第一:session和cookie是两种会话机制:session存储在服务器里,cookie存储在本地电脑里!他们的作用都是让本地PC的浏览器与远程服务器半永久性链接;
第二:关于current_user(当前用户)是一个方法,这个current_user方法可以用session或cookie或者两者一起用,作用就是让本地PC的浏览器与远程服务器半永久性链接;
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 549 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信