top of page

Cookieを利用した自動ログイン処理(C#)

執筆者の写真: KawaharaKawahara

今までVisualStudio2003で1つのWebプロジェクトだったものを、VisualStudio2005へ手動でアップグレードすると共に2つのプロジェクトへ分割してみた。

すると、それまで気になっていなかった認証処理が各プロジェクト内で必要になり、仕方なくCookieを使う事に。またCookieがあれば自動でログインするにはどうすればいいか考えた結果、Login用のWebページのPage_LoadイベントにてFormsAuthentication.RedirectFromLoginPageを使えば問題ないみたい。

Loginコントロールを使っていたので、Authenticateイベントをコールバックしないといけない?と思ったが不要だった。

Login.aspx


<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Login.aspx.cs" Inherits="Login" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>ログイン</title>
</head>
<body>
    <form id="login" method="post" runat="server">
        <asp:Login ID="Login1" runat="server" BackColor="#F7F6F3" BorderColor="#E6E2D8" BorderPadding="4"
            BorderStyle="Solid" BorderWidth="1px" Font-Names="Verdana" Font-Size="0.8em"
            ForeColor="#333333" DisplayRememberMe="False" OnAuthenticate="Login1_Authenticate">
            <TextBoxStyle Font-Size="0.8em" />
            <LoginButtonStyle BackColor="#FFFBFF" BorderColor="#CCCCCC" BorderStyle="Solid" BorderWidth="1px"
                Font-Names="Verdana" Font-Size="0.8em" ForeColor="#284775" />
            <InstructionTextStyle Font-Italic="True" ForeColor="Black" />
            <TitleTextStyle BackColor="#5D7B9D" Font-Bold="True" Font-Size="0.9em" ForeColor="White" />
        </asp:Login>
    </form>
</body>
</html>

Login.aspx.cs


using System;
using System.IO;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Login : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            // 初回表示時の処理
            
            [ここでCookieをチェック。]
            if ([Cookieが有効であれば])
            {
                FormsAuthentication.RedirectFromLoginPage([Cookieに格納されているユーザー名], false);
            }

        }

    }

    private void InitializeComponent()
    {

    }

    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    {
        e.Authenticated = false;

        if ([カスタム認証処理])
        {
            // Cookieの発行
            HttpCookie co = new HttpCookie([Cookieの格納名]);
            [Cookieへユーザー名の格納]
            Response.Cookies.Add(co);
            e.Authenticated = true;
        }

    }
}

しかし、昔のソースはいつも書き直したくなってしまい妥協点を見出して作業に取り掛かるまで時間がかかる。

 
 
 

最新記事

すべて表示

Visual WebGui販売終了

GrapeCityが販売していたVisual WebGuiが2014年10月22日で販売終了との事。価格は高いが、便利なんだろうなと気になっていた製品だった。 2013年の6月から1年半弱で販売終了となったのに気付いた時は、「買わなくてよかった」と「こんなことあるの?」とい...

C#でのクラスライブラリの設計

C#でクラスライブラリを使用すると複数のプロジェクトで使用できて便利。しかし、どんな単位でクラスライブラリを分割するか悩みながらも下記のように考えていました。 外部コンポーネントの有無 DBの接続先 ODBCの設定要否 .NetframeWorkのバージョン...

Comments


bottom of page