星期四, 7月 29, 2010

[Asp.Net] 跨網站登入 Single Sign On (SSO)

目前的case暫以player大大提供的做法。

1.跨網站單一登入(Single Sign On)的作法概念 by topcat

小喵的方式是透過SQL來當作媒介,假設小喵要從WebA跳到WebB。
首先要準備一個兩個應用程式都能夠存取的資料庫。然後設計一個資料表來處理。這個資料表有以下幾個欄位
  1. GUID:由NewId()產生出來類似【504B1790-E93A-4445-B262-E73A113BF336】這樣格式的資料
  2. UserId:WebB的帳號,當然WebA與WebB可以用相通的帳號,或者是透過員工代號取得WebB的帳號
  3. TimeOut:過期時間,產生該筆資料的時間+2分種。也就是從WebA到WebB的過程,小喵估計不會超過2分鐘,時間過期後該筆資料就沒用了。
接著就是運作的方式
步驟如下
  1. WebA點選轉入WebB
  2. 寫入1筆過程資料,例如:5ED095B8-350D-42C3-953B-9C53DED54AFD,topcat,20080402165823
  3. WebA Submit GUID給 WebB
  4. WebB承接到GUID取回資料,並判斷現在時間沒有大於20080402165823
  5. 如果4.找不到,顯示錯誤並拒絕登入
  6. 如果4找到,進行登入程序
  7. 刪除該GUID資料
2.跨網站登入機制 - by player
1.把你的登入用的相關欄位, 先用1個class先定義好
2.在Global.asax 中, 定義一個 static public 的變數, 當作是放資料的容器
請自行參照 System.Collections.Generic.Dictionary<> 與你在1所自訂的class
3.WebService 大概做5個公開的函式
a.登入
b.驗証是否已登入
c.登出
d.Set共用變數
e.Get共用變數

a.是傳入帳密, 登入成功時, 傳回GUID, 失敗時返回相關的提示訊息
b.是傳入GUID, 判斷是否已登入
d與e是給跨網站時, 變數互通使用

3.ASP.NET Single Sign-On
採用 .Net的表單驗證票證(Forms Authentication Tickets)的加密、解密以及驗證

一些背景知識參考:
鬼打牆事件之『ASP.NET 無法刪除 Cookie 的問題』 
解釋 Cookie 的特性 
深入瞭解 GUID 與為什麼要用 GUID(Globally unique identifier)
web service 介紹 
Dictionary in .NET C#
C#,利用Mutex實現應用程式的單實例運行

[Asp.Net] 如何使用javascript 控制 .net 驗證控制項

今天遇到了一個需求,起因是因為使用textbox搭配jquery datepicker元件驗證控制項時,
使用IE8瀏覽時,會產生javascript錯誤訊息(使用1.3.2,改用1.4.2不會有這個問題)
於是換了一個方法來直接避掉這個錯誤,於是又新增了第二個textbox,並利用css設定成style="visibility:hidden"。

星期三, 7月 21, 2010

[Asp.Net] 使用DataView RowFilter 過濾 Datatable

最近在巢狀式繫結時,常常會重覆過濾每次要繫結的資料列數,簡單使用DataView RowFilter
就可以達到SQL Where效果,找時間再補上linq的方法。

[SQLite]Firefox SQLite Manager

利用Sqlite Manager來測試iphone裡面一些apps使用的資料表並將它匯出成csv文字檔(另外匯出*.sql的執行會是亂碼XD),
由於excel直接開啟這個csv匯出的這個檔案,會因為excel不支援utf8而亂碼,
所需先需要先啟動excel後,利用外部匯入這個資料來指定utf8編碼格式開啟,就可以順利打開:
點選資料->開啟文字檔->設定檔案原始格式

星期四, 7月 15, 2010

星期二, 7月 13, 2010

[Asp.Net] Json 序列化及反序列化

今天幫學弟測試了一下 Json 序列化及反序列化的簡單範例,也用了平常很少使用的泛型。
記錄一下以供日後參考。 畢竟AJAX常會用到json來傳輸資料。

使用以下範例需注意事項:
1.加入參考組件:組件 System.Runtime.Serialization (在 System.Runtime.Serialization.dll 中)
2.序列化的物件格式可自行修改自已自訂的格式
3.物件變數的命名需跟json的宣告名稱一致

星期日, 7月 11, 2010

[Asp.Net] ListView DataPager SetPageProperties換頁

在listview要指定跳頁時,並不是直接將指定的頁數丟進去,
因為頁碼並不是listview參數所要的row起始索引的話,
因此才會跳錯頁的!!

    /// 指定跳頁
    public void JumpPage(int jumpPage)
    {
        //算出指定頁的起始索引值
        int lowerBand = (jumpPage - 1) * this.dataPager.PageSize;
        this.dataPager.SetPageProperties(lowerBand, this.dataPager.PageSize, true);
    } 

Git 學習資源

好用的Git分散式版本控制工具。團隊開發畢備的好幫手。


Ubuntu Enviornment:
$apt-get install git-core gitk # in ubuntu

step1:create repository in server
/var/git/repos                                #server repos path
$mkdir serverproject #建立你的目錄
$cd serverproject
$git --bare init --shared                #建立GitProjectName的repository

step2:create repository in client
$vi .gitconfig #your profile
[user]
        name = kenwctsai
        email = bigdstut@gmail.com


$cd clientproject#到你的專案目錄下
$git init #git metadata

step3:commit to server (之後更新code只要用這就好)
$git add . #git新增檔案
$git commit -m 'your commit msg' #commit to repos server

其他輔助的功能:


檢查檔案狀態
$git status

檢查log
$git log

Reference:
  1. Pro Git
  2. A tour of git: the basics
  3. http://git-scm.com/
  4. Git-shape(Git for .NET)
  5. Git 初學筆記 - 指令操作教學
  6. 我愛GIT(.pdf) jserv
  7. Git Study
  8. Git 版本控制系統(2) 開 branch 分支和操作遠端 repo.




安裝工具
  1. msysgit-git for windows
  2. TortoiseGit The coolest Interface to (Git) Version Control

星期日, 7月 04, 2010

[Asp.net] ListView ItemDataBound下抓取樣版的欄位值

剛好需要在ItemTemplate 按下編輯按鈕時,設定下拉式選單的值為ItemTemplate Lable繫結的值。
只要在ItemDataBound判斷是否為edit mode.做以下記錄

[Asp.Net] 資料繫結控制項的相關事件關係與抓取

使用資料擊結控制項時常在驅動更新、刪除事件時常常需要擷取元件的值來做相關的處理(常常很用到的問題!!),以前都習慣在print出元件的位置(註解部份),再找出相對的值,不過其實用FindControl這個方法就可以簡單達到我們的需求了

星期六, 7月 03, 2010