نحوه ی تنظیم Session Expire در صفحات Dot Net Nuke
گاهی اوقات در صفحات Dot Net Nuke با این مشکل مواجه می شویم که در حین کار کردن در صفحات Session Expire می شود و روند کار کردن با سیستم با مشکل مواجه می شود. برای حل این موضوع به روش زیر عمل می کنیم.
تبدیل تاریخ شمسی به میلادی در sql server
برخی مواقع در هنگام ایجاد لاگ سیستم تاریخ های میلادی را در دیتابیس نگهداری میکنیم که برای اینکه بخواهیم تاریخ های میلادی را در یک نگاه بصورت شمسی هم مشاهده کنیم لازم است که یک تبدیل تاریخ صورت گیرد.
در این مثال ما با استفاده از یک تابع در Sql Server این کار را انجام می دهیم.
ALTER Function [dbo].[ToTimeSolar] ( @date DATETIME )
RETURNS NVARCHAR(50)
BEGIN
DECLARE @shYear AS INT ,@shMonth AS INT ,@shDay AS INT ,@intYY AS INT ,@intMM AS INT ,@intDD AS INT ,@Kabiseh1 AS INT ,@Kabiseh2 AS INT ,@d1 AS INT ,@m1 AS INT, @shMaah AS NVARCHAR(max),@shRooz AS NVARCHAR(max),@DayCnt AS INT
DECLARE @DayDate AS NVARCHAR(max)
SET @intYY = DATEPART(yyyy, @date)
IF @intYY < 1000 SET @intYY = @intYY + 2000
SET @intMM = MONTH(@date)
SET @intDD = DAY(@date)
SET @shYear = @intYY - 622
SET @DayCnt = datepart(dw, '01/02/' + CONVERT(CHAR(4), @intYY))
SET @m1 = 1
SET @d1 = 1
SET @shMonth = 10
SET @shDay = 11
IF ( ( @intYY - 1993 ) % 4 = 0 ) SET @shDay = 12
WHILE ( @m1 != @intMM ) OR ( @d1 != @intDD )
BEGIN
SET @d1 = @d1 + 1
SET @DayCnt = @DayCnt + 1
IF ( ( @intYY - 1992 ) % 4 = 0) SET @Kabiseh1 = 1 ELSE SET @Kabiseh1 = 0
IF ( ( @shYear - 1371 ) % 4 = 0) SET @Kabiseh2 = 1 ELSE SET @Kabiseh2 = 0
IF
(@d1 = 32 AND (@m1 = 1 OR @m1 = 3 OR @m1 = 5 OR @m1 = 7 OR @m1 = 8 OR @m1 = 10 OR @m1 = 12))
OR
(@d1 = 31 AND (@m1 = 4 OR @m1 = 6 OR @m1 = 9 OR @m1 = 11))
OR
(@d1 = 30 AND @m1 = 2 AND @Kabiseh1 = 1)
OR
(@d1 = 29 AND @m1 = 2 AND @Kabiseh1 = 0)
BEGIN
SET @m1 = @m1 + 1
SET @d1 = 1
END
IF @m1 > 12
BEGIN
SET @intYY = @intYY + 1
SET @m1 = 1
END
IF @DayCnt > 7 SET @DayCnt = 1
SET @shDay = @shDay + 1
IF
(@shDay = 32 AND @shMonth < 7)
OR
(@shDay = 31 AND @shMonth > 6 AND @shMonth < 12)
OR
(@shDay = 31 AND @shMonth = 12 AND @Kabiseh2 = 1)
OR
(@shDay = 30 AND @shMonth = 12 AND @Kabiseh2 = 0)
BEGIN
SET @shMonth = @shMonth + 1
SET @shDay = 1
END
IF @shMonth > 12
BEGIN
SET @shYear = @shYear + 1
SET @shMonth = 1
END
END
SET @DayDate = Convert(nvarchar(50),@shYear)+'/'+RIGHT('0' + CAST(@shMonth AS VARCHAR), 2)+'/'+RIGHT('0' + CAST(@shDay AS VARCHAR), 2)+ ' ' + LEFT(CONVERT(TIME,@date),5)
RETURN @DayDate
END
تابع بالا را با استفاده از کدهای زیر در اسکویل سرور صدا می زنیم
select dbo.ToTimeSolar('2016-06-25 04:05:52.447')
و خروجی این تابع به شکل زیر خواهد بود
1395/04/05 04:05
convert Gregorian to persian date in sql server
convert miladi to persian date in sql server
رفتن به صفحه ی ورود به برنامه در زمان پایان Session
هنگامی که در یک صفحه ی وب فرم Session برنامه Time Out می شود لازم است که بصورت اتوماتیک به صفحه ی ورود به برنامه برود تا کاربران سیستم دوباره وارد سیستم شوند .
برای اینکار کافی است که کد زیر را در صفحه ی Master Page برنامه ی وب قرار دهیم. تا به طور اتوماتیک هنگام Session Time out به صفحه ی ورود به برنامه برود.
Response.AppendHeader("Refresh", Convert.ToString(Session.Timeout * 60+5) + "; URL=Login.aspx");
نحوه ساخت Captcha برای سایت
وقتی که سایتی بر روی اینترنت بارگذاری می شود و دارای صفحه ی ورود کاربران به سامانه می باشد باید هنگام ورود به سامانه از Captcha استفاده شود تا از هک کردن سایت توسط روبات ها جلوگیری شود.
ساخت کپچا خیلی ساده است فقط کافی است طبق روش زیر عمل شود.
ابتدا در صفحه ی html کدهای زیر را قرار می دهیم.
تسکت باکسی که می خواهیم کد های آن بررسی شود
<asp:TextBox ID="txtCaptcha" runat="server" Width="200px"></asp:TextBox>
بعد تصویر نمایش کپچا را در زیر قرار می دهیم.
<table>
<tr>
<td style="height: 50px; width:100px;">
<asp:Image ID="imgCaptcha" runat="server" />
</td>
<td valign="middle">
<asp:Button ID="btnRefresh" runat="server" Text="Refresh" OnClick="btnRefresh_Click" />
</td>
</tr>
</table>
حال یک صفحه ی نمایش عکس بصورت زیر اضافه می کنیم. و در بخش کدهای سمت سی شارپ کدهای زیر را قرار می دهیم.
public partial class GenerateCaptcha : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Clear();
int height = 40;
int width = 130;
Bitmap bmp = new Bitmap(width, height);
RectangleF rectf = new RectangleF(10, 5, 0, 0);
Graphics objGraphics = Graphics.FromImage(bmp);
Color objcolor = Color.FromArgb(250,182,239, 147);
objcolor.GetHue();
objGraphics.Clear(objcolor);
objGraphics.SmoothingMode = SmoothingMode.AntiAlias;
objGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
objGraphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
string objtext = Session["captcha"].ToString();
string objnewText = "";
for (int i = 0; i < objtext.Length; i++)
{
objnewText += objtext.Substring(i,1);
objnewText += " ";
}
objGraphics.DrawString(objnewText, new Font("Thaoma", 16, FontStyle.Strikeout), Brushes.Gray, rectf);
objGraphics.DrawRectangle(new Pen(Color.Gold), 1, 1, width - 2, height - 2);
objGraphics.Flush();
Response.ContentType = "image/jpeg";
bmp.Save(Response.OutputStream, ImageFormat.Jpeg);
objGraphics.Dispose();
bmp.Dispose();
}
}
حال در صفحه ای که می خواهیم کپچا ها را بررسی کنیم بصورت زیر عمل می کنیم.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
FillCapctha();
}
}
void FillCapctha()
{
try
{
Random random = new Random();
string combination = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
StringBuilder captcha = new StringBuilder();
for (int i = 0; i < 6; i++)
captcha.Append(combination[random.Next(combination.Length)]);
Session["captcha"] = captcha.ToString();
imgCaptcha.ImageUrl = "GenerateCaptcha.aspx?" + DateTime.Now.Ticks.ToString();
//HandlerTest.ashx
//imgCaptcha.ImageUrl = "HandlerTest.ashx?" + DateTime.Now.Ticks.ToString();
}
catch
{
throw;
}
}
protected void btnRefresh_Click(object sender, EventArgs e)
{
FillCapctha();
}
protected void btnRegister_Click(object sender, EventArgs e)
{
if (Session["captcha"].ToString().ToLower() != txtCaptcha.Text.Trim().ToLower())
Response.Write("Invalid Captcha Code");
else
Response.Write("Valid Captcha Code");
FillCapctha();
}
}