我的想法是我将有一个促销代码系统,所以当用户在“EnterPromoCode.aspx”上输入有效的促销代码时,网站会将他们定向到“PromoDeals.aspx”。但是,我不希望任何人能够简单地输入“PromoDeals.aspx”并进入它。
我正在考虑将某种查询字符串参数传递给 PromoDeals.aspx 以验证用户来自哪里(通过 Page_Load 方法),但我不确定是否有直接的方法来执行此操作。有什么建议吗?
您可以要求在 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 上,如果未设置此会话变量,您将重定向用户。
基本上,想法如下:
您的页面之一检查用户是否知道“秘密”。这是一种授权。
其他一些页面只有在用户获得授权时才能工作。
很明显,关于成功授权的信息应该存储在某个地方,在各个页面之间共享。有很多方法可以在页面之间共享信息。
一)会议。一旦用户提交了正确的促销代码,您的授权页面就会在 Session 集合中存储一些内容。这可能只是一个指示成功授权事实的标志,或者可能是促销代码 - 如果您稍后需要它的值。
任何其他页面都可以在 Page_Load 处理程序中检查 Session 中存储(或未存储)的内容并决定接下来要做什么:继续或呈现错误,或重定向到另一个页面。注意:会话过期。会话结束时会忘记您在那里存储的内容。
B) 饼干。这样,您的信息将持续尽可能多的时间 - 您可以设置到期日期。但由于存储在用户的浏览器中,因此也存在缺点:浏览器可能拒绝存储您的cookies;用户可以清除它们。
C) 数据库。如果您想确保用户获得一次且永远的授权,请将此信息存储在数据库中。