我的客户希望通过查询字符串传递值,但他们不希望查询字符串显示在浏览器的地址栏中。传递的值用于跟踪目的。我知道您单击 href 链接后不会发生回发。
有什么方法可以从查询字符串中获取值而不在浏览器的地址栏中显示它?我认为这可能是不可能的,但我可能错了;我希望看看是否有人有任何答案。
我的客户希望通过查询字符串传递值,但他们不希望查询字符串显示在浏览器的地址栏中。传递的值用于跟踪目的。我知道您单击 href 链接后不会发生回发。
有什么方法可以从查询字符串中获取值而不在浏览器的地址栏中显示它?我认为这可能是不可能的,但我可能错了;我希望看看是否有人有任何答案。
这取决于您要跟踪的内容。如果您试图在用户通过您的网站时动态跟踪他们,那么最好将一个小令牌放入会话中 - 正如里卡多在他的回答中所说的那样。
如果您想跟踪特定链接在您的网站上的执行情况,或者用户正在关注哪些链接,那么您需要使用一些 JavaScript:
基本上,您需要在调用服务器上的服务(或类似服务)onclick
的标签上创建一个事件,<a>
以跟踪/记录此点击发生的事实。
如果此方法返回true
,则控制权将返回给浏览器,并请求原始的 href。
此示例假定使用 jQuery,但其他库将允许您执行类似的操作 - 您可以使用所有本机 ASP.NET 工具,我手头只有以下代码:
<a href="/someUrl.aspx" onClick="javascript:TrackThis(this);return true;">text</a>
<script type="text/javascript">
function TrackThis(link){
$.ajax({
url: "/WebServices/ClickTracker.asmx/Track",
type: "POST",
dataType: "json",
data: "{\"url\":\"" + link + "\", \"page\":\"" + window.location + "\"}"
contentType: "application/json; charset=utf-8"
});
}
然后,您可以创建一个简单的 Web 服务,它接受您传入的值(在本例中是用户单击的链接的值,以及他们当时所在页面的 url),执行其处理,并保持不碍事。
谷歌对他们的搜索结果做了非常相似的事情——浏览器状态栏中的 URL 是来自索引站点的 URL,但是在中间你访问了谷歌服务器上的跟踪页面,说你点击了它,它使用onclick
事件。
听起来您需要将字符串存储在查询字符串以外的位置。如何为此使用状态管理,例如,将此值存储在会话中,这样您就可以在用户单击链接后打开的新页面中使用它。
将其添加到 Querystring:
“ http://yoursite.com/yourpage?id=123 ”
将其存储在会话中:
使用服务器控件(例如 LinkButton 或按钮)将用户重定向到新页面,然后将字符串值保存到会话。
protected void LinkButton_Click(object sender, EventArgs e)
{
Session["Id"] = 123;
Response.Redirect("yourpage.aspx", false);
}
要从会话中获取字符串值,请使用:
Session["id"].ToString();
要了解有关状态管理的更多信息并查看其他选项,请转到此处
不同的解决方案
在将查询字符串值添加到 URL 之前对其进行加密,然后对其进行解密。如果您走这条路,请查看本文以获取有关加密/解密值的详细信息。
不,如果它在查询字符串中,最终用户将通过地址栏看到它。这是 HTTP GET 请求的标准行为。
如果您使用的是 WebForms,请查看LinkButton
控件。这将执行一个实际的回发,这是一个 POST 操作。您将在您的 .NET 代码隐藏中响应 LinkButton 的OnClick
事件,并且您已经准备就绪。