如何限制对ASP.NET网页的直接访问?

时间:2013-10-19 22:25:29

标签: c# asp.net redirect

我的想法是我将有一个促销代码系统,因此当用户使用“EnterPromoCode.aspx”并输入有效的促销代码时,该网站会将其引导至“PromoDeals.aspx”。但是,我不希望任何人只能输入“PromoDeals.aspx”并转到它。

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

2 个答案:

答案 0 :(得分:3)

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

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

同样如果使用get,请检查Request.QueryString [“PromoCode”]并对其进行验证(检查您的数据库或其他任何内容,看看它是否是有效的promocode,如果没有,请将用户重定向远离页面。

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

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

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

答案 1 :(得分:3)

基本上,这个想法如下:

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

  2. 只有在用户获得授权的情况下,其他一些页面才有效。

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

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

    任何其他页面都可以检查Page_Load处理程序中Session中存储(或未存储)的内容,然后决定该怎么做:继续或渲染错误,或重定向到另一个页面。 注意:会话到期。在会议结束时,你所存储的内容会被遗忘。

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

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