2017-10-17 205 views
0

我正在使用的应用程序在页面初始加载时设置了隐藏的输入变量。变量需要在所有页面上访问。没有将这些变量转换为会话变量的原因是用户可以使用不同的参数打开另一个浏览器,并将这些值作为隐藏的输入传递,使其无任何问题。什么是最好的替代方案,以摆脱这些隐藏的输入..我试着将所有变量转换为结构,但结构需要作为表单提交的一部分发布以使其可供后续页面使用。另一个缺点是这个应用程序是使用frames.I没有任何代码发布。ColdFusion将隐藏的表单变量转换为结构

+0

你需要决定你想要什么。隐藏的输入变量只能通过表单提交给ColdFusion使用。需要会话变量才能使数据可供后续页面使用,但他们在打开新浏览器时提到了警告。也许我不理解你的问题? –

+0

你是对的......隐藏的输入虽然容易出现安全风险......还有其他的替代方式来传递这些表单变量吗?现在我创建了一个新的隐藏变量,它保存了所有隐藏输入的编码json字符串。但新变量又是一个隐藏输入 – DG3

+0

如果这些变量的原始值来自用户输入,那么您究竟在担心什么? –

回答

1

听起来好像您希望与同一个Web会话关联的不同浏览器实例维护自己的不同数据集。通过传递formurl变量来做到这一点似乎是一个坏主意。

您可以使用的一种方法是onSessionStart(或根据需要)在用户会话中创建一个结构以保存数据的实例。例如

session.data = { 
    someRandomKey: { 
     valueA: 42, 
     valueB: "Porridge" 
    } 
} 

然后,只需通过someRandomKey作为隐藏form字段或查询字符串参数。现在,当他们提交表单以更新变量时,您可以使用隐藏表单字段中的id从session.data找到适当的结构。

当用户需要这个表单的一个新实例时,给它们一些方法,比如链接或按钮,创建一个新的唯一键,用这个键插入一个结构体session.data并用任何默认值填充它,然后作为一个隐藏的表单字段或查询字符串参数再次加载沿着新的id传递的表单。