流水帳記到現在,系統基本完成,不過還有幾點需要解決。
首先,我們來新增乙個「記住我」的功能。當使用者登入的時候,如果選擇了「remember me」,那麼就同時把使用者名稱密碼等資訊儲存到使用者的cookie中,使用者訪問時,先檢測cookie,如果cookie中有儲存的資訊,則驗證此資訊,如果驗證通過,則建立相應的session,否則導向login頁面。
先在sysuser中建立序列化和反序列化的兩個函式:
**public
static
string
serializetostring(
string
name,
string
password)\n"
, name, password);
var bs
=encoding.utf8.getbytes(s);
return
base32stringcoding.decode(bs);
}public
static
sysuser deserializefromstring(
string
source)
return
null;}
然後修改main.master中的oninit以修改驗證邏輯加入cookie部分:
**protected
override
void
oninit(eventargs e)if(
null
==u)
this
.setloginuser(u);
}username.text
=u.name;
base
.oninit(e);
}然後修改login.aspx加入remember me按鈕:
**protected
void
page_load(
object
sender, eventargs e)
formsauthentication.signout();
var luc
=request.cookies[const.logincookie];
if(luc
!=null)}
}protected
void
signin_click(
object
sender, eventargs e)
private
void
processlogin(
string
name,
string
password)
;response.cookies.add(cookie);
}var url
=request[const.backtourl];if(
!string
.isnullorempty(url))
else
}else
}執行程式,驗證如果選擇了remember me,則再次直接訪問頁面,不再需要登入,而且,welcome資訊顯示名稱正確;如果點選了logout,再次執行程式,則仍然需要登入。現在,這個功能開發完畢。
第二個要完成的功能,是wiki和使用者關聯。既然我們現在有登入使用者了,自然可以記錄下究竟是誰修改了哪個wiki頁。
修改article和articlehistory,增加user:
[belongsto]
public
abstract
sysuser user
asp:templatefield
headertext
="user"
>
<
itemtemplate
>
# ((articlehistory)(container.dataitem)).user.name
%>
itemtemplate
>
asp:templatefield
>
在show.aspx裡增加乙個tip變數,乙個msg變數,這個msg變數,標記為inmaster,以便我們訪問母板頁裡的msg控制項:
[inmaster]
public
lephone.web.common.noticelabel msg;
private
string
tip;
然後在page_load裡對tip進行賦值,再override onprerender函式,新增這個tip(之所以需要這樣,而不是直接在page_load裡操作,也是因為asp.net奇怪的事件載入順序):
protected
override
void
onprerender(eventargs e)
}現在,執行程式,show頁面底邊將會顯示編輯者的名字和編輯的時間,history頁面也會顯示編輯者的名字了。
最後,我們再考慮一下效能。對於show頁面而言,問題不大,不過,history頁面,並不顯示content,卻需要載入它,是有些浪費的,所以,我們標記articlehistory的content為延遲載入:
[lazyload]
public
abstract
string
content
另外,history裡顯示使用者名稱,show頁面顯示使用者名稱,都需要訪問資料庫,history更是多次訪問資料庫讀取sys_users表,只為得到使用者名稱,對於這一點,我們給它加個快取,在web.config裡新增:
<
add
key="cacheenabled"
value
="true"
/>
在sysuser上標記可以被快取:
[cacheable]
public
abstract
class
sysuser : linqobjectmodel
<
sysuser
>
為了執行時可以跟蹤生成的sql語句,也為了驗證一下我們快取的效果,修改web.config中的log設定,將它設定為將生成的sql寫入資料庫:
<
add
key="sqllogrecorder"
value
="lephone.data.logging.databaselogrecorder, lephone.data"
/>
分別以開啟和關閉快取的方式訪問相同的網頁,之後檢查資料庫lephone_logs表裡的sql語句,驗證有快取時生成sql數量較少。另外,articlehistory相關的select語句在history頁面不會有content在內。
好的,這個visualwiki系列文章到這裡算是全部結束了,雖然這個wiki系統,還有一些功能有待完善,比如歷史比對功能等,不過,它已經是乙個可以執行,並且用起來也頗順手的wiki了,作為我前乙個公司的內部wiki系統,它一直執行,而且表現不錯。最終**:visualwiki7.7z
全文完。
wiki系統開發
1 賬戶管理功能,包括賬戶分級,許可權分配等。2 工程管理功能,包括工程初始化 工程關聯,工程專案 工程具體 庫等 3 目錄的靈活編排,包括多級目錄 父級目錄的隨時設定更改等 4 頁面的附件功能,包括附件管理 新增刪除 有條件的對於文字新增預覽功能。5 排版功能,頁面編寫採用markdown引擎實現...
桌面版wiki開發招兵
桌面版wiki開發招兵 群的號碼 18997277 有興趣者 入 專案的部落格 http blog.sina.com.cn u 1224228575 面向人群 1 開發環境 delphi sql server2000 首選開發環境 c s結構orb s結構 2 對桌面wiki感興趣的人。3 想進行專...
ChatBot framework 開發實踐
通常而言,通用聊天機械人 比如小冰等 底層技術是採用類似seq2seq等 生成 技術的。但是這種機械人屬於探索性質,無法 提供特定的服務。而siri則是兼具閒聊以及垂直領域功能的,比如可以預約提醒,打 定餐廳等特定功能。相信siri在實現特定預約提醒,打 功能等,則是使用了 語言模板 匹配技術以及結...