0

我的想法是我将有一个促销代码系统,所以当用户在“EnterPromoCode.aspx”上输入有效的促销代码时,网站会将他们定向到“PromoDeals.aspx”。但是,我不希望任何人能够简单地输入“PromoDeals.aspx”并进入它。

我正在考虑将某种查询字符串参数传递给 PromoDeals.aspx 以验证用户来自哪里(通过 Page_Load 方法),但我不确定是否有直接的方法来执行此操作。有什么建议吗?

4

2 回答 2

3

您可以要求在 PromoDeals.aspx 上发布或获取(或同时支持两者)。

如果使用 post,在 PromoDeals.aspx 的 Page_Load 中,您可以检查 Request.Form["PromoCode"] 并验证它,如果它无效,您可以执行 Response.Redirect 返回 EnterPromoDeals.aspx。

同样,如果使用 get,请检查 Request.QueryString["PromoCode"] 并验证它(检查您的数据库或其他任何东西以查看它是否是有效的促销代码,如果不是,则将用户重定向离开页面。

促销代码的验证也可以在 EnterPromoCode.aspx 中完成,如果用户输入有效的促销代码,则设置会话变量;

Session["PromoCode"] = Request.Form["PromoCode"].ToString();

如果已设置(输入了有效代码),则重定向到 PromoDeals.aspx。然后,在 PromoDeals.aspx 上,如果未设置此会话变量,您将重定向用户。

于 2013-10-19T22:38:35.320 回答
3

基本上,想法如下:

  1. 您的页面之一检查用户是否知道“秘密”。这是一种授权。

  2. 其他一些页面只有在用户获得授权时才能工作。

很明显,关于成功授权的信息应该存储在某个地方,在各个页面之间共享。有很多方法可以在页面之间共享信息。

一)会议。一旦用户提交了正确的促销代码,您的授权页面就会在 Session 集合中存储一些内容。这可能只是一个指示成功授权事实的标志,或者可能是促销代码 - 如果您稍后需要它的值。

任何其他页面都可以在 Page_Load 处理程序中检查 Session 中存储(或未存储)的内容并决定接下来要做什么:继续或呈现错误,或重定向到另一个页面。注意:会话过期。会话结束时会忘记您在那里存储的内容。

B) 饼干。这样,您的信息将持续尽可能多的时间 - 您可以设置到期日期。但由于存储在用户的浏览器中,因此也存在缺点:浏览器可能拒绝存储您的cookies;用户可以清除它们。

C) 数据库。如果您想确保用户获得一次且永远的授权,请将此信息存储在数据库中。

于 2013-10-19T23:07:12.963 回答