我有一个Web应用程序,它有一个搜索表单。用户将其查询字符串输入到输入字段中,并使用提交按钮提交表单。 接下来,“结果”页面显示搜索结果。
结果页面有一个"无休止的滚动"特征。这意味着,当到达页面末尾时,现在会加载结果。 所以我必须使用相同的查询字符串将第二个查询发送到搜索引擎。
目前,我看到以下选项:
1。)使用session-Parameter:
第一个搜索请求(来自搜索表单)将所有搜索参数(包括用户的查询字符串)存储在会话存储中,并且"无限滚动" -javascript函数只调用"搜索" - 没有任何额外GET参数的URL
Pro:没有直接的XSS问题(?)
Contra:用户通常需要通过执行操作从session参数中显式重置其搜索/删除查询字符串。
2。)在结果页面中回显查询字符串:
在生成搜索结果页面期间,用户的查询字符串被渲染到网页中。例如,在隐藏字段中或作为javascript参数。因此,javascript可以获取此查询字符串并将其用作查询参数或使用ajax提交表单。
Pro:当重新进入页面时,没有从会话存储中加载旧的搜索数据 - 它对用户来说更透明。否" reset-session-search-parameter"机制是必要的
反对:即使HTML被编码,它可能对XSS很脆弱......(?)我的问题: a。)这些正确和反对的假设是正确的吗? b。)你会解决这个问题?
答案 0 :(得分:0)
如果你正在进行无休止的滚动,你的页面肯定会有一些javascript,所以我会做类似以下的事情:
将搜索查询从服务器传递到页面内容,如:
<script type="application/json" id="current-filter">
{query: "search for me"}
</script>
触发滚动evet时,请阅读过滤器并发送请求:
var filter = JSON.parse(document.getElementById('current-filter').innerHTML);
// send the form