[code="ruby"]
class ApplicationController < ActionController::Base
protect_from_forgery # :secret => '6f8929a08f3dbc2029c96b29a3aa288b'
end
[/code]
[size=medium]
第一个问题是session以cookiestore的存储方式为什么要注释掉:scret的内容呢?看了好多blog所说form等生成的security token是由session与这个scret的内容计算得到的。如果不是,那么form等生成的security token与protect_from_forgery设置的secret的值、与config/environement里session的secret值有什么关系呢?
第二个问题是如果以:active_record_store有如下代码
[/size]
[code="ruby"]
class ApplicationController < ActionController::Base
protect_from_forgery :secret => 'some_key'
end
#in environement.rb
config.action_controller.session = {
:session_key => '_myapp_session',
:secret => 'some_key'
}
config.action_controller.session_store = :active_record_store
[/code]
[size=medium]
上述代码中environement.rb中的secret为什么要与ApplicationController中的secret一样,因为我看老多blog也是这么描述的,可是我在rails2.x中建了一个myapp的项目,发现在cookiestore模式下ApplicationController里的secret与environement中的secret的值完全不一样,按照英文说明如果改为:active_record_store,只需要打开ApplicationController与environement中的两个注释就OK,并不需要把这两个secret值改为一样的。
其实问题的关键还是不明白security token的生成到底跟这两个secret有什么关系?如果没关系跟什么有关系?
[/size]
[b]问题补充:[/b]
[size=medium]
谢谢jim.jin,可是如果是为了安全为什么cookiestore要把:secret注释掉呢?
[/size]
[b]问题补充:[/b]
另外protect_from_forgery方法在那个文件中呢?