(利用tempdata判断action是直接被访问还是重定向访问)防止微信活动中用户绕过关注公众号的环节

说明:这个不是在进行微信公众号开发,也就是说在不能获取用户openid的前提下做的下面操作

1.动机:最近有个微信活动(关注了服务号的可以免费领取礼品),要做这么一个功能,活动的入口在微信服务号的菜单上,只有从这里链接过来的用户才有权限看到领取礼品的表单,否则就是引导关注微信服务号的链接,但是为了防止用户直接将活动也分享出去了,然后其他用户避开了关注微信这样一个环节,所有已关注的用户打开活动链接之后的地址和服务号上的入口链接地址不能一样

2. 意图:我想在服务号的入口上加上一个参数,标明是从微信过来的(表明是已经关注了服务号的),然后在用户打开活动的时候再想办法将这个参数去掉或者变成其他的参数,就能保证用户打开前跟分享的地址是不一样的;而这里我就利用了tempdata能在action之间传递数据的特性实现了这个功能

3. 代码

 public ActionResult Topic_JieYuan()
        {
            int count = bllOrders.GetOrderCount();
            ViewData["count"] = count;
            if (Request["isweixin"] != null)  //表明是从微信过来的
            {
                TempData["isweixin"] = 1;
                return RedirectToAction("Topic_JieYuan", "topic", new { isfirst = 1 }); //进行重定向生成新的url,新url地址中有一个参数是isfirst =1与最原始的url不一样(用户分享的话是新的url),当下次有人直接打开分享的地址时,由于TempData["isweixin"] = null所以不会运行 ViewData["isback"] = 1;这段(前台是根据 ViewData["isback"] = 1;来做一些权限判断显示的)
            }
            if (Request["isfirst"] != null && TempData["isweixin"] != null)
            {
                ViewData["isback"] = 1;
            }

            return View("/Views/Topic/JieYuan/topicjieyuan.aspx");
        }
//同上
  public ActionResult JieYuan()
        {
            //if (!Request.Headers["User-Agent"].Contains("MicroMessenger"))
            //{
            //    Response.Redirect("/topic/jieyuan.htm");
            //    return View("/Views/Topic/JieYuan/topicjieyuan.aspx");
            //}

            if (Request["isback"] == null)
            {
                TempData["isweixin"] = 1;
                return RedirectToAction("JieYuan", "topic", new { isback = 1 });
                //Response.Redirect("/topic/jieyuan.htm?isweixin=1&isback=1");
                //return View("/Views/Topic/JieYuan/topicjieyuan.aspx");
            }
            if (TempData["isweixin"] == null)
            {
                return RedirectToAction("Topic_JieYuan", "topic");
            }

            Hashtable htRegion = new Hashtable();
            htRegion.Add("ParentId", 0);
            List<Jiyun.Model.Jy_Hishop_Regions> listRegion = bllOrders.GetRegionsList(htRegion);
            ViewData["list"] = listRegion;
            return View("/Views/Topic/JieYuan/Index.aspx");
        }

PS:利用了tempdata能在action之间传递值的特性

ps:演化过程 要判断从微信来的和非微信来的链接-->(转化成)判断链接上是否带有isweixin的参数-->(而这个参数在程序中直接转化等同于了有没有tempdata)判断有没有tempdata-->然后根据有没有tempdata做相应的操作

时间: 2024-10-01 04:41:15

(利用tempdata判断action是直接被访问还是重定向访问)防止微信活动中用户绕过关注公众号的环节的相关文章

Asp.Net MVC 利用ReflectedActionDescriptor判断Action返回类型

System.Web.Mvc.ReflectedActionDescriptor descriptor = filterContext.ActionDescriptor as System.Web.Mvc.ReflectedActionDescriptor; if (descriptor != null) { Type actionType =descriptor.MethodInfo.ReturnType; if (actionType.Equals(typeof(ActionResult))

微信openid和UnionID (多公众号如何判断是否是同一人)

以下内容源于网络,因为非博客园信息,有想收藏,只能直接复制粘贴了,还希望原稿人员理解. 微信公众平台更新,为开发者提供UnionID机制 经开发者反馈,由于同一公司下多个公众号之间需要用户帐号互通,微信开放平台提供了UnionID机制,来解决此问题. 通过获取用户基本信息接口,开发者可通过OpenID来获取用户基本信息,而如果开发者拥有多个公众号,可使用以下办法通过UnionID机制来在多公众号之间进行用户帐号互通. 1. 将多个公众号绑定到同一个微信开放平台(open.weixin.qq.co

微信 判断用户是否关注

Thinkphp中调用ThinkWechat插件的is_subscribe方法 //判断用户是否关注公众号 传入$openid 返回 1已关注 0未关注 function is_subscribe($openid){ /* 加载微信SDK */ import ( "ORG.Util.ThinkWechat" ); $weixin = new ThinkWechat (); /* 获取请求信息 */ $data = $weixin->is_subscribe($openid); r

利用LoadRunner判断HTTP服务器的返回状态

利用LoadRunner判断HTTP服务器的返回状态第一种方法:是利用LR的内置函数web_get_int_property.举例:#include "web_api.h"Action(){int HttpRetCode;web_url("网易",       "URL=http://www.163.com",       "TargetFrame=_TOP",       LAST);HttpRetCode = web_ge

使用$_GET[&quot;action&quot;]取值时必须先判断action是否存在。

使用$_GET["action"]取值时必须先判断action是否存在. if (isset($_GET["action"]) && $_GET["action"]=="register"){ //获取一个键值对判断提交数据是否成功 echo "提交数据成功!"; exit(); ($_POST[ ]同上)

利用jQuery判断浏览器的版本和类型

利用jQuery判断浏览器的版本:现在各种版本的浏览器满天飞,不能说是一种坏事,因为版本多了就会出现竞争,能够提高产品的质量,给用户带来了好处,但是也给程序员带来了无穷的烦恼.由于不同版本的浏览器可能会对同样的代码有不同的解读,所以要根据不同的浏览器写不同的代码,所以就要对浏览器的版本和类型进行判断.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta

利用Squid反向代理搭建CDN缓存服务器加快Web访问速度

2011年11月26日 ? Web服务器架构 ? 评论数 2 案例:Web服务器:域名www.abc.com IP:192.168.21.129 电信单线路接入访问用户:电信宽带用户.移动宽带用户出现问题:电信用户打开www.abc.com正常,移动用户打开www.abc.com很慢,甚至打不开解决方案:在移动机房放置一台CDN代理服务器,通过智能DNS解析,让电信用户直接访问Web服务器.让移动用户访问CDN代理服务器,解决移动用户访问Web服务器慢的问题具体操作:CDN代理服务器:系统:Ce

利用HTML5判断用户是否正在浏览页面技巧

现在,HTML5里页面可见性接口就提供给了程序员一个方法,让他们使用visibilitychange页面事件来判断当前页面可见性的状态,并针对性的执行某些任务.同时还有新的document.hidden属性可以使用. document.hidden 这个新出现的document.hidden属性,它显示页面是否为用户当前观看的页面,值为ture或false. document.visibilityState visibilityState的值要么是visible (表明页面为浏览器当前激活tab

php如何判断电脑访问还是手机访问?

手机上网用户数量越来越大,如今各网站都推出了手机网站,电脑用户访问时直接访问电脑版网页,当用户通过手机访问网站时则跳自动跳转到手机版网页,下面给大家分享一段php中判断电脑访问还是手机访问的代码: <?php //手机网页跳转 //如果检测到访问的浏览器为下列一个指定的移动浏览器 则返回true function is_mobile(){ $regex_match="/(nokia|iphone|android|motorola|^mot\-|softbank|foma|docomo|kd