不要想當然,原來ASP與ASP.NET不能共用工作階段(Session)

來源:互聯網
上載者:User

  網站的論壇使用垃圾動網論壇,近一個月內,論壇幾乎成了垃圾資訊的集散地,雖然有多個版主幫忙刪貼,但還是搞得焦頭爛額,論壇已經有一定的貼子,現在想換論壇太麻煩了,那些垃圾資訊都是自動註冊,自動發貼。看來要防止這些自動發貼的軟體,只能從防止自動註冊入手,動網的驗證碼太過簡單,普通的識別軟體就能識別成功。於是想利用ASP.NET強大的GDI+功能來產生中文驗證碼。因為以前寫過ASP.net利用GDI處理圖片的功能,現在稍微改一下就可以產生驗證碼,效果還可以。驗證碼是從一段中文文字中取出4個字組成的,文字顏色、字型都是隨機產生,雜色點也是隨機產生。

     ,    

但在最後,即因為Session不能共用,而無法使用。因為ASP的Session儲存在記憶體中,ASP和ASP.net不在同一進程,不同進程式無法共用記憶體,造成ASP和ASP.net不能共用Session資料。

在網上雖然有很多方法達到差不多的效果,但那些方法都不適合用於驗證碼。

本來以為ASP和ASP.net都是MS的東西,這些對像應該能共用的,沒想到居然是這個樣子。

下面的產生中文驗證碼的代碼,那些中文字元沒有利用隨機數產生中文的編碼的方法,因為那樣產生的中文字元有可能太過複雜,比如一些比較複雜的繁體字,所以這些中文字元只是來自一段中文的簡介。雖然不長,但能應付一般的情況。

 

<%@ Page Language="C#" ContentType="image/gif" %>
<%@ Import Namespace="System.Drawing"%>
<%@ Import Namespace="System.Web.SessionState"%>


<script runat="server">
    //Filename:dv_getcode.aspx

    protected void Page_Load(object sender, EventArgs e)
    ...{
        Bitmap image = new Bitmap(72,18);

        Graphics g = Graphics.FromImage(image);
        g.Clear(Color.FromArgb(0xFF,0xFF,0xFF));

        Font drawFont;
        PointF drawPoint;
        SolidBrush drawBrush;
        string[] fonts = new string[3];
        string randomString=getRandomString();
        //Session("GetCode")=randomString;

        fonts[0]="宋體";
        fonts[1]="隸書";
        fonts[2]="楷體";    


    
        Random random = new  Random();

        for(int i=0;i<100;i++)...{
            image.SetPixel(random.Next(72),random.Next(18),Color.FromArgb(random.Next(255),random.Next(255),random.Next(255)));
        }

        drawFont = new Font(fonts[random.Next(3)], 13);
        drawPoint = new PointF(0.0F, 0.0F);
        drawBrush = new SolidBrush(Color.FromArgb(100+random.Next(155),100+random.Next(155),0));
        g.DrawString(randomString.Substring(0,1), drawFont, drawBrush, drawPoint);

        drawFont = new Font(fonts[random.Next(3)], 13);
        drawPoint = new PointF(18.0F, 0.0F);
        drawBrush = new SolidBrush(Color.FromArgb(0,100+random.Next(155),100+random.Next(155)));
        g.DrawString(randomString.Substring(1,1), drawFont, drawBrush, drawPoint);

        drawFont = new Font(fonts[random.Next(3)], 13);
        drawPoint = new PointF(36.0F, 0.0F);
        drawBrush = new SolidBrush(Color.FromArgb(100+random.Next(155),0,100+random.Next(155)));
        g.DrawString(randomString.Substring(2,1), drawFont, drawBrush, drawPoint);

        drawFont = new Font(fonts[random.Next(3)], 13);
        drawPoint = new PointF(54.0F, 0.0F);
        drawBrush = new SolidBrush(Color.FromArgb(0,0,100+random.Next(155)));
        g.DrawString(randomString.Substring(3,1), drawFont, drawBrush, drawPoint);


        image.Save(Response.OutputStream , System.Drawing.Imaging.ImageFormat.Gif );
 
        
    }


    string getRandomString()...{
        Random ro = new Random(unchecked((int)DateTime.Now.Ticks));
        
        string txt="澄海義工社是由澄海茶座愛心小組發展而來澄海茶座愛心小組建立於年當時在E京澄海茶座論壇上由一群熱心網友發起成立以網路為平台在網上發貼發動網友募捐善款開展助學救困活動經過幾年的發展澄海茶座愛心小組也從一個網路組織走到了現實世界社會上眾多的愛心人士紛紛投身到愛心活動中來他們中有機關幹部普通打工者老師私企老闆等等愛心小組嚴格遵循先調查落實情況再確定助學救困對象的原則使基金每一分每一厘都用到確實有實際困難需要救助的對象身上多年來通過澄海茶座愛心小組資助的對象遍及澄海各鄉鎮年開始澄海茶座愛心小組成員經過多番努力在澄海區進行愛心助學扶貧救急活動籌得善款近多萬元資助貧困學生近多人並開展協助學活動固定每月援助部分貧困學生家庭元使這些貧困學生得以繼續學業為了使這支隊伍更加健康的發展澄海茶座愛心小組正式更名為澄海愛心義工社成為一個正式的義工組織並以參與互助奉獻進步作為義工社的宗旨計劃在未來以扶貧助困跟助學兩條線為主軸開展各種愛心活動並且將我們的愛心無限的延伸";
        
        return txt.Substring(1+ro.Next(txt.Length-4),4);
    }

</script>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.