浏览器中限定session存在的范围仅在本窗口与子窗口及其对话框,而本窗口可以传递session,而对话框只能引用session却不能传递。
也就是说window.open().open().open().....是session传递的过程。
而window.dialog()只能使用session,其dialog.open()或dialog.dialog()都不能得到session。
另外我们要指出session传递万能的方法:
url请求指定的target,如href与form sumit,它之所以能取得session是因为请求必须需要session去提交请求
为了允许dialog能open window我们需要让dialog的页面来打开窗口,我们应该采用请求方式传递窗口,如组件一个href和form提交,
然后我们给以一个target,当target找不到时会自动创建窗口,其效果类似与dialog.open()。
可能大家注意到dialog传dialog不需要session的设计,是因为不会需要dialog再打开dialog的情况。可参阅对话框与窗口的定义
这里需要强调的是:
一些文章中提到用div层替代dialog模式的方式,笔者认为这不是一种安全的做法,有经验的人很轻易就可以破解它。dialog模式才是安全的。