Session的配置
人人都知道怎么去使用session,但是初学者,尤其是自学的学生可能对于进程外的Session不甚了解,今天我就花半个小时做个简单的示范。
首先,session其虽然是基于cookie的,同时只对本次会话来产生效果,(原理很简单,就是字典内保存一个字典,外层字典的key也就是asp_netsessionId是由.NET自动分配的并保存到只对本次会话有效的cookie中,我们的工作只是负责内部我们需要的字典的内容,并有.NET自动分配一块区域保存起来,当然这个是有一定的时效性的,模拟代码可以看看资料,或者反编译下看看,很简单,这里就不说了)但是有时候我们就会发现默认的session存储方式,可能造成数据的丢失,虽然他的存储类型是object,但是我们要是存储大量的数据就经常出现数据的丢失。
下面我介绍两种人人都知道,我也刚知道的配置手段。这两种都是进程外的session机制,可以在IIS或ASP.NET服务意外关闭时继续保持状态.
1.使用aspnet_state.exe
步骤:对于win7不用找,直接打开服务,其一般是已经注册了的。
开始---运行---services.msc 找到
然后打开它,之后我们在web.config内配置Session状态
1 <sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424"/
42424是默认端口号(可以修改),同时默认的也是本机访问,要是需要可以在注册表配置,以满足远程服务器的。
然后AllowRemoteConnection值修改为1,0代表本机。之后字需要修改web.config中的IP即可。
现在我们来测试一下效果:
我前面的就不在演示了,这里演示一下,获取session后关闭了服务器,之后再打开,我就可以看到
多次刷新session任然保持存在。
2.使用SQLServer保存
微软提供了2中保存方式(附带创建脚本)
临时储存区:InstallSqlState.sql & UninstallSqlState.sql
永久储存区:InstallPersistSqlState.sql & UninstallPersistSqlState.sql
步骤:我们在.NET安装目录中打开,出现
之后配置一下web.config,
<sessionState mode="SQLServer" sqlConnectionString="...."></sessionState>
我们打开SSMS.
运行我们上面官方提供的脚本,这里拿出一个临时储存区的脚本运行
1 /********************************************************************* 2 InstallSqlState.SQL 3 4 Installs the tables, and stored procedures necessary for 5 supporting ASP.NET session state. 6 7 Copyright Microsoft, Inc. 8 All Rights Reserved. 9 10 *********************************************************************/ 11 12 SET QUOTED_IDENTIFIER OFF 13 GO 14 SET ANSI_NULLS ON 15 GO 16 17 PRINT '' 18 PRINT '-----------------------------------------' 19 PRINT 'Starting execution of InstallSqlState.SQL' 20 PRINT '-----------------------------------------' 21 PRINT '--------------------------------------------------' 22 PRINT 'Note: ' 23 PRINT 'Do not run this file manually. ' 24 PRINT 'You should use aspnet_regsql.exe to install ' 25 PRINT 'and uninstall SQL session state. ' 26 PRINT '' 27 PRINT 'Run ''aspnet_regsql.exe -?'' for details. ' 28 PRINT '--------------------------------------------------' 29 GO 30 31 /*****************************************************************************/ 32 33 USE master 34 GO 35 36 /* Create and populate the session state database */ 37 38 IF DB_ID(N'ASPState') IS NULL BEGIN 39 DECLARE @cmd nvarchar(500) 40 SET @cmd = N'CREATE DATABASE [ASPState]' 41 EXEC(@cmd) 42 END 43 GO 44 45 /* Drop all tables, startup procedures, stored procedures and types. */ 46 47 /* Drop the DeleteExpiredSessions_Job */ 48 49 DECLARE @jobname nvarchar(200) 50 SET @jobname = N'ASPState' + '_Job_DeleteExpiredSessions' 51 52 -- Delete the [local] job 53 -- We expected to get an error if the job doesn't exist. 54 PRINT 'If the job does not exist, an error from msdb.dbo.sp_delete_job is expected.' 55 56 EXECUTE msdb.dbo.sp_delete_job @job_name = @jobname 57 GO 58 59 DECLARE @sstype nvarchar(128) 60 SET @sstype = N'sstype_temp' 61 62 IF UPPER(@sstype) = 'SSTYPE_TEMP' AND OBJECT_ID(N'dbo.ASPState_Startup', 'P') IS NOT NULL BEGIN 63 DROP PROCEDURE dbo.ASPState_Startup 64 END 65 66 USE [tempdb] 67 GO 68 69 IF OBJECT_ID(N'dbo.ASPStateTempSessions','U') IS NOT NULL BEGIN 70 DROP TABLE dbo.ASPStateTempSessions 71 END 72 73 IF OBJECT_ID(N'dbo.ASPStateTempApplications','U') IS NOT NULL BEGIN 74 DROP TABLE dbo.ASPStateTempApplications 75 END 76 77 USE [ASPState] 78 GO 79 80 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'GetMajorVersion') AND (type = 'P'))) 81 DROP PROCEDURE [dbo].GetMajorVersion 82 GO 83 84 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'CreateTempTables') AND (type = 'P'))) 85 DROP PROCEDURE [dbo].CreateTempTables 86 GO 87 88 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetVersion') AND (type = 'P'))) 89 DROP PROCEDURE [dbo].TempGetVersion 90 GO 91 92 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'GetHashCode') AND (type = 'P'))) 93 DROP PROCEDURE [dbo].GetHashCode 94 GO 95 96 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetAppID') AND (type = 'P'))) 97 DROP PROCEDURE [dbo].TempGetAppID 98 GO 99 100 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItem') AND (type = 'P'))) 101 DROP PROCEDURE [dbo].TempGetStateItem 102 GO 103 104 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItem2') AND (type = 'P'))) 105 DROP PROCEDURE [dbo].TempGetStateItem2 106 GO 107 108 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItem3') AND (type = 'P'))) 109 DROP PROCEDURE [dbo].TempGetStateItem3 110 GO 111 112 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItemExclusive') AND (type = 'P'))) 113 DROP PROCEDURE [dbo].TempGetStateItemExclusive 114 GO 115 116 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItemExclusive2') AND (type = 'P'))) 117 DROP PROCEDURE [dbo].TempGetStateItemExclusive2 118 GO 119 120 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItemExclusive3') AND (type = 'P'))) 121 DROP PROCEDURE [dbo].TempGetStateItemExclusive3 122 GO 123 124 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempReleaseStateItemExclusive') AND (type = 'P'))) 125 DROP PROCEDURE [dbo].TempReleaseStateItemExclusive 126 GO 127 128 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempInsertUninitializedItem') AND (type = 'P'))) 129 DROP PROCEDURE [dbo].TempInsertUninitializedItem 130 GO 131 132 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempInsertStateItemShort') AND (type = 'P'))) 133 DROP PROCEDURE [dbo].TempInsertStateItemShort 134 GO 135 136 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempInsertStateItemLong') AND (type = 'P'))) 137 DROP PROCEDURE [dbo].TempInsertStateItemLong 138 GO 139 140 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemShort') AND (type = 'P'))) 141 DROP PROCEDURE [dbo].TempUpdateStateItemShort 142 GO 143 144 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemShortNullLong') AND (type = 'P'))) 145 DROP PROCEDURE [dbo].TempUpdateStateItemShortNullLong 146 GO 147 148 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemLong') AND (type = 'P'))) 149 DROP PROCEDURE [dbo].TempUpdateStateItemLong 150 GO 151 152 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemLongNullShort') AND (type = 'P'))) 153 DROP PROCEDURE [dbo].TempUpdateStateItemLongNullShort 154 GO 155 156 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempRemoveStateItem') AND (type = 'P'))) 157 DROP PROCEDURE [dbo].TempRemoveStateItem 158 GO 159 160 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempResetTimeout') AND (type = 'P'))) 161 DROP PROCEDURE [dbo].TempResetTimeout 162 GO 163 164 IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'DeleteExpiredSessions') AND (type = 'P'))) 165 DROP PROCEDURE [dbo].DeleteExpiredSessions 166 GO 167 168 IF EXISTS(SELECT name FROM systypes WHERE name ='tSessionId') 169 EXECUTE sp_droptype tSessionId 170 GO 171 172 IF EXISTS(SELECT name FROM systypes WHERE name ='tAppName') 173 EXECUTE sp_droptype tAppName 174 GO 175 176 IF EXISTS(SELECT name FROM systypes WHERE name ='tSessionItemShort') 177 EXECUTE sp_droptype tSessionItemShort 178 GO 179 180 IF EXISTS(SELECT name FROM systypes WHERE name ='tSessionItemLong') 181 EXECUTE sp_droptype tSessionItemLong 182 GO 183 184 IF EXISTS(SELECT name FROM systypes WHERE name ='tTextPtr') 185 EXECUTE sp_droptype tTextPtr 186 GO 187 188 /*****************************************************************************/ 189 190 CREATE PROCEDURE dbo.GetMajorVersion 191 @@ver int OUTPUT 192 AS 193 BEGIN 194 DECLARE @version nchar(100) 195 DECLARE @dot int 196 DECLARE @hyphen int 197 DECLARE @SqlToExec nchar(4000) 198 199 SELECT @@ver = 7 200 SELECT @version = @@Version 201 SELECT @hyphen = CHARINDEX(N' - ', @version) 202 IF (NOT(@hyphen IS NULL) AND @hyphen > 0) 203 BEGIN 204 SELECT @hyphen = @hyphen + 3 205 SELECT @dot = CHARINDEX(N'.', @version, @hyphen) 206 IF (NOT(@dot IS NULL) AND @dot > @hyphen) 207 BEGIN 208 SELECT @version = SUBSTRING(@version, @hyphen, @dot - @hyphen) 209 SELECT @@ver = CONVERT(int, @version) 210 END 211 END 212 END 213 GO 214 215 /*****************************************************************************/ 216 217 USE [ASPState] 218 219 /* Find out the version */ 220 DECLARE @ver int 221 EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT 222 223 DECLARE @cmd nchar(4000) 224 225 IF (@ver >= 8) 226 SET @cmd = N' 227 CREATE PROCEDURE dbo.CreateTempTables 228 AS 229 CREATE TABLE [tempdb].dbo.ASPStateTempSessions ( 230 SessionId nvarchar(88) NOT NULL PRIMARY KEY, 231 Created datetime NOT NULL DEFAULT GETUTCDATE(), 232 Expires datetime NOT NULL, 233 LockDate datetime NOT NULL, 234 LockDateLocal datetime NOT NULL, 235 LockCookie int NOT NULL, 236 Timeout int NOT NULL, 237 Locked bit NOT NULL, 238 SessionItemShort VARBINARY(7000) NULL, 239 SessionItemLong image NULL, 240 Flags int NOT NULL DEFAULT 0, 241 ) 242 243 CREATE NONCLUSTERED INDEX Index_Expires ON [tempdb].dbo.ASPStateTempSessions(Expires) 244 245 CREATE TABLE [tempdb].dbo.ASPStateTempApplications ( 246 AppId int NOT NULL PRIMARY KEY, 247 AppName char(280) NOT NULL, 248 ) 249 250 CREATE NONCLUSTERED INDEX Index_AppName ON [tempdb].dbo.ASPStateTempApplications(AppName) 251 252 RETURN 0' 253 ELSE 254 SET @cmd = N' 255 CREATE PROCEDURE dbo.CreateTempTables 256 AS 257 CREATE TABLE [tempdb].dbo.ASPStateTempSessions ( 258 SessionId nvarchar(88) NOT NULL PRIMARY KEY, 259 Created datetime NOT NULL DEFAULT GETDATE(), 260 Expires datetime NOT NULL, 261 LockDate datetime NOT NULL, 262 LockCookie int NOT NULL, 263 Timeout int NOT NULL, 264 Locked bit NOT NULL, 265 SessionItemShort VARBINARY(7000) NULL, 266 SessionItemLong image NULL, 267 Flags int NOT NULL DEFAULT 0, 268 ) 269 270 CREATE NONCLUSTERED INDEX Index_Expires ON [tempdb].dbo.ASPStateTempSessions(Expires) 271 272 CREATE TABLE [tempdb].dbo.ASPStateTempApplications ( 273 AppId int NOT NULL PRIMARY KEY, 274 AppName char(280) NOT NULL, 275 ) 276 277 CREATE NONCLUSTERED INDEX Index_AppName ON [tempdb].dbo.ASPStateTempApplications(AppName) 278 279 RETURN 0' 280 281 EXEC (@cmd) 282 GO 283 284 /*****************************************************************************/ 285 286 EXECUTE sp_addtype tSessionId, 'nvarchar(88)', 'NOT NULL' 287 GO 288 289 EXECUTE sp_addtype tAppName, 'varchar(280)', 'NOT NULL' 290 GO 291 292 EXECUTE sp_addtype tSessionItemShort, 'varbinary(7000)' 293 GO 294 295 EXECUTE sp_addtype tSessionItemLong, 'image' 296 GO 297 298 EXECUTE sp_addtype tTextPtr, 'varbinary(16)' 299 GO 300 301 /*****************************************************************************/ 302 303 CREATE PROCEDURE dbo.TempGetVersion 304 @ver char(10) OUTPUT 305 AS 306 SELECT @ver = "2" 307 RETURN 0 308 GO 309 310 /*****************************************************************************/ 311 312 CREATE PROCEDURE dbo.GetHashCode 313 @input tAppName, 314 @hash int OUTPUT 315 AS 316 /* 317 This sproc is based on this C# hash function: 318 319 int GetHashCode(string s) 320 { 321 int hash = 5381; 322 int len = s.Length; 323 324 for (int i = 0; i < len; i++) { 325 int c = Convert.ToInt32(s[i]); 326 hash = ((hash << 5) + hash) ^ c; 327 } 328 329 return hash; 330 } 331 332 However, SQL 7 doesn't provide a 32-bit integer 333 type that allows rollover of bits, we have to 334 divide our 32bit integer into the upper and lower 335 16 bits to do our calculation. 336 */ 337 338 DECLARE @hi_16bit int 339 DECLARE @lo_16bit int 340 DECLARE @hi_t int 341 DECLARE @lo_t int 342 DECLARE @len int 343 DECLARE @i int 344 DECLARE @c int 345 DECLARE @carry int 346 347 SET @hi_16bit = 0 348 SET @lo_16bit = 5381 349 350 SET @len = DATALENGTH(@input) 351 SET @i = 1 352 353 WHILE (@i <= @len) 354 BEGIN 355 SET @c = ASCII(SUBSTRING(@input, @i, 1)) 356 357 /* Formula: 358 hash = ((hash << 5) + hash) ^ c */ 359 360 /* hash << 5 */ 361 SET @hi_t = @hi_16bit * 32 /* high 16bits << 5 */ 362 SET @hi_t = @hi_t & 0xFFFF /* zero out overflow */ 363 364 SET @lo_t = @lo_16bit * 32 /* low 16bits << 5 */ 365 366 SET @carry = @lo_16bit & 0x1F0000 /* move low 16bits carryover to hi 16bits */ 367 SET @carry = @carry / 0x10000 /* >> 16 */ 368 SET @hi_t = @hi_t + @carry 369 SET @hi_t = @hi_t & 0xFFFF /* zero out overflow */ 370 371 /* + hash */ 372 SET @lo_16bit = @lo_16bit + @lo_t 373 SET @hi_16bit = @hi_16bit + @hi_t + (@lo_16bit / 0x10000) 374 /* delay clearing the overflow */ 375 376 /* ^c */ 377 SET @lo_16bit = @lo_16bit ^ @c 378 379 /* Now clear the overflow bits */ 380 SET @hi_16bit = @hi_16bit & 0xFFFF 381 SET @lo_16bit = @lo_16bit & 0xFFFF 382 383 SET @i = @i + 1 384 END 385 386 /* Do a sign extension of the hi-16bit if needed */ 387 IF (@hi_16bit & 0x8000 <> 0) 388 SET @hi_16bit = 0xFFFF0000 | @hi_16bit 389 390 /* Merge hi and lo 16bit back together */ 391 SET @hi_16bit = @hi_16bit * 0x10000 /* << 16 */ 392 SET @hash = @hi_16bit | @lo_16bit 393 394 RETURN 0 395 GO 396 397 /*****************************************************************************/ 398 399 DECLARE @cmd nchar(4000) 400 401 SET @cmd = N' 402 CREATE PROCEDURE dbo.TempGetAppID 403 @appName tAppName, 404 @appId int OUTPUT 405 AS 406 SET @appName = LOWER(@appName) 407 SET @appId = NULL 408 409 SELECT @appId = AppId 410 FROM [tempdb].dbo.ASPStateTempApplications 411 WHERE AppName = @appName 412 413 IF @appId IS NULL BEGIN 414 BEGIN TRAN 415 416 SELECT @appId = AppId 417 FROM [tempdb].dbo.ASPStateTempApplications WITH (TABLOCKX) 418 WHERE AppName = @appName 419 420 IF @appId IS NULL 421 BEGIN 422 EXEC GetHashCode @appName, @appId OUTPUT 423 424 INSERT [tempdb].dbo.ASPStateTempApplications 425 VALUES 426 (@appId, @appName) 427 428 IF @@ERROR = 2627 429 BEGIN 430 DECLARE @dupApp tAppName 431 432 SELECT @dupApp = RTRIM(AppName) 433 FROM [tempdb].dbo.ASPStateTempApplications 434 WHERE AppId = @appId 435 436 RAISERROR(''SQL session state fatal error: hash-code collision between applications ''''%s'''' and ''''%s''''. Please rename the 1st application to resolve the problem.'', 437 18, 1, @appName, @dupApp) 438 END 439 END 440 441 COMMIT 442 END 443 444 RETURN 0' 445 EXEC(@cmd) 446 GO 447 448 /*****************************************************************************/ 449 450 /* Find out the version */ 451 452 DECLARE @ver int 453 EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT 454 DECLARE @cmd nchar(4000) 455 IF (@ver >= 8) 456 SET @cmd = N' 457 CREATE PROCEDURE dbo.TempGetStateItem 458 @id tSessionId, 459 @itemShort tSessionItemShort OUTPUT, 460 @locked bit OUTPUT, 461 @lockDate datetime OUTPUT, 462 @lockCookie int OUTPUT 463 AS 464 DECLARE @textptr AS tTextPtr 465 DECLARE @length AS int 466 DECLARE @now AS datetime 467 SET @now = GETUTCDATE() 468 469 UPDATE [tempdb].dbo.ASPStateTempSessions 470 SET Expires = DATEADD(n, Timeout, @now), 471 @locked = Locked, 472 @lockDate = LockDateLocal, 473 @lockCookie = LockCookie, 474 @itemShort = CASE @locked 475 WHEN 0 THEN SessionItemShort 476 ELSE NULL 477 END, 478 @textptr = CASE @locked 479 WHEN 0 THEN TEXTPTR(SessionItemLong) 480 ELSE NULL 481 END, 482 @length = CASE @locked 483 WHEN 0 THEN DATALENGTH(SessionItemLong) 484 ELSE NULL 485 END 486 WHERE SessionId = @id 487 IF @length IS NOT NULL BEGIN 488 READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length 489 END 490 491 RETURN 0' 492 ELSE 493 SET @cmd = N' 494 CREATE PROCEDURE dbo.TempGetStateItem 495 @id tSessionId, 496 @itemShort tSessionItemShort OUTPUT, 497 @locked bit OUTPUT, 498 @lockDate datetime OUTPUT, 499 @lockCookie int OUTPUT 500 AS 501 DECLARE @textptr AS tTextPtr 502 DECLARE @length AS int 503 DECLARE @now AS datetime 504 SET @now = GETDATE() 505 506 UPDATE [tempdb].dbo.ASPStateTempSessions 507 SET Expires = DATEADD(n, Timeout, @now), 508 @locked = Locked, 509 @lockDate = LockDate, 510 @lockCookie = LockCookie, 511 @itemShort = CASE @locked 512 WHEN 0 THEN SessionItemShort 513 ELSE NULL 514 END, 515 @textptr = CASE @locked 516 WHEN 0 THEN TEXTPTR(SessionItemLong) 517 ELSE NULL 518 END, 519 @length = CASE @locked 520 WHEN 0 THEN DATALENGTH(SessionItemLong) 521 ELSE NULL 522 END 523 WHERE SessionId = @id 524 IF @length IS NOT NULL BEGIN 525 READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length 526 END 527 528 RETURN 0' 529 530 EXEC (@cmd) 531 GO 532 533 /*****************************************************************************/ 534 535 DECLARE @ver int 536 EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT 537 DECLARE @cmd nchar(4000) 538 IF (@ver >= 8) 539 SET @cmd = N' 540 CREATE PROCEDURE dbo.TempGetStateItem2 541 @id tSessionId, 542 @itemShort tSessionItemShort OUTPUT, 543 @locked bit OUTPUT, 544 @lockAge int OUTPUT, 545 @lockCookie int OUTPUT 546 AS 547 DECLARE @textptr AS tTextPtr 548 DECLARE @length AS int 549 DECLARE @now AS datetime 550 SET @now = GETUTCDATE() 551 552 UPDATE [tempdb].dbo.ASPStateTempSessions 553 SET Expires = DATEADD(n, Timeout, @now), 554 @locked = Locked, 555 @lockAge = DATEDIFF(second, LockDate, @now), 556 @lockCookie = LockCookie, 557 @itemShort = CASE @locked 558 WHEN 0 THEN SessionItemShort 559 ELSE NULL 560 END, 561 @textptr = CASE @locked 562 WHEN 0 THEN TEXTPTR(SessionItemLong) 563 ELSE NULL 564 END, 565 @length = CASE @locked 566 WHEN 0 THEN DATALENGTH(SessionItemLong) 567 ELSE NULL 568 END 569 WHERE SessionId = @id 570 IF @length IS NOT NULL BEGIN 571 READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length 572 END 573 574 RETURN 0' 575 576 EXEC (@cmd) 577 GO 578 579 580 /*****************************************************************************/ 581 582 /* Find out the version */ 583 584 DECLARE @ver int 585 EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT 586 DECLARE @cmd nchar(4000) 587 IF (@ver >= 8) 588 SET @cmd = N' 589 CREATE PROCEDURE dbo.TempGetStateItem3 590 @id tSessionId, 591 @itemShort tSessionItemShort OUTPUT, 592 @locked bit OUTPUT, 593 @lockAge int OUTPUT, 594 @lockCookie int OUTPUT, 595 @actionFlags int OUTPUT 596 AS 597 DECLARE @textptr AS tTextPtr 598 DECLARE @length AS int 599 DECLARE @now AS datetime 600 SET @now = GETUTCDATE() 601 602 UPDATE [tempdb].dbo.ASPStateTempSessions 603 SET Expires = DATEADD(n, Timeout, @now), 604 @locked = Locked, 605 @lockAge = DATEDIFF(second, LockDate, @now), 606 @lockCookie = LockCookie, 607 @itemShort = CASE @locked 608 WHEN 0 THEN SessionItemShort 609 ELSE NULL 610 END, 611 @textptr = CASE @locked 612 WHEN 0 THEN TEXTPTR(SessionItemLong) 613 ELSE NULL 614 END, 615 @length = CASE @locked 616 WHEN 0 THEN DATALENGTH(SessionItemLong) 617 ELSE NULL 618 END, 619 620 /* If the Uninitialized flag (0x1) if it is set, 621 remove it and return InitializeItem (0x1) in actionFlags */ 622 Flags = CASE 623 WHEN (Flags & 1) <> 0 THEN (Flags & ~1) 624 ELSE Flags 625 END, 626 @actionFlags = CASE 627 WHEN (Flags & 1) <> 0 THEN 1 628 ELSE 0 629 END 630 WHERE SessionId = @id 631 IF @length IS NOT NULL BEGIN 632 READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length 633 END 634 635 RETURN 0' 636 ELSE 637 SET @cmd = N' 638 CREATE PROCEDURE dbo.TempGetStateItem3 639 @id tSessionId, 640 @itemShort tSessionItemShort OUTPUT, 641 @locked bit OUTPUT, 642 @lockDate datetime OUTPUT, 643 @lockCookie int OUTPUT, 644 @actionFlags int OUTPUT 645 AS 646 DECLARE @textptr AS tTextPtr 647 DECLARE @length AS int 648 DECLARE @now AS datetime 649 SET @now = GETDATE() 650 651 UPDATE [tempdb].dbo.ASPStateTempSessions 652 SET Expires = DATEADD(n, Timeout, @now), 653 @locked = Locked, 654 @lockDate = LockDate, 655 @lockCookie = LockCookie, 656 @itemShort = CASE @locked 657 WHEN 0 THEN SessionItemShort 658 ELSE NULL 659 END, 660 @textptr = CASE @locked 661 WHEN 0 THEN TEXTPTR(SessionItemLong) 662 ELSE NULL 663 END, 664 @length = CASE @locked 665 WHEN 0 THEN DATALENGTH(SessionItemLong) 666 ELSE NULL 667 END, 668 669 /* If the Uninitialized flag (0x1) if it is set, 670 remove it and return InitializeItem (0x1) in actionFlags */ 671 Flags = CASE 672 WHEN (Flags & 1) <> 0 THEN (Flags & ~1) 673 ELSE Flags 674 END, 675 @actionFlags = CASE 676 WHEN (Flags & 1) <> 0 THEN 1 677 ELSE 0 678 END 679 WHERE SessionId = @id 680 IF @length IS NOT NULL BEGIN 681 READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length 682 END 683 684 RETURN 0' 685 686 EXEC (@cmd) 687 GO 688 689 /*****************************************************************************/ 690 691 DECLARE @ver int 692 EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT 693 DECLARE @cmd nchar(4000) 694 IF (@ver >= 8) 695 SET @cmd = N' 696 CREATE PROCEDURE dbo.TempGetStateItemExclusive 697 @id tSessionId, 698 @itemShort tSessionItemShort OUTPUT, 699 @locked bit OUTPUT, 700 @lockDate datetime OUTPUT, 701 @lockCookie int OUTPUT 702 AS 703 DECLARE @textptr AS tTextPtr 704 DECLARE @length AS int 705 DECLARE @now AS datetime 706 DECLARE @nowLocal AS datetime 707 708 SET @now = GETUTCDATE() 709 SET @nowLocal = GETDATE() 710 711 UPDATE [tempdb].dbo.ASPStateTempSessions 712 SET Expires = DATEADD(n, Timeout, @now), 713 LockDate = CASE Locked 714 WHEN 0 THEN @now 715 ELSE LockDate 716 END, 717 @lockDate = LockDateLocal = CASE Locked 718 WHEN 0 THEN @nowLocal 719 ELSE LockDateLocal 720 END, 721 @lockCookie = LockCookie = CASE Locked 722 WHEN 0 THEN LockCookie + 1 723 ELSE LockCookie 724 END, 725 @itemShort = CASE Locked 726 WHEN 0 THEN SessionItemShort 727 ELSE NULL 728 END, 729 @textptr = CASE Locked 730 WHEN 0 THEN TEXTPTR(SessionItemLong) 731 ELSE NULL 732 END, 733 @length = CASE Locked 734 WHEN 0 THEN DATALENGTH(SessionItemLong) 735 ELSE NULL 736 END, 737 @locked = Locked, 738 Locked = 1 739 WHERE SessionId = @id 740 IF @length IS NOT NULL BEGIN 741 READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length 742 END 743 744 RETURN 0' 745 ELSE 746 SET @cmd = N' 747 CREATE PROCEDURE dbo.TempGetStateItemExclusive 748 @id tSessionId, 749 @itemShort tSessionItemShort OUTPUT, 750 @locked bit OUTPUT, 751 @lockDate datetime OUTPUT, 752 @lockCookie int OUTPUT 753 AS 754 DECLARE @textptr AS tTextPtr 755 DECLARE @length AS int 756 DECLARE @now AS datetime 757 758 SET @now = GETDATE() 759 UPDATE [tempdb].dbo.ASPStateTempSessions 760 SET Expires = DATEADD(n, Timeout, @now), 761 @lockDate = LockDate = CASE Locked 762 WHEN 0 THEN @now 763 ELSE LockDate 764 END, 765 @lockCookie = LockCookie = CASE Locked 766 WHEN 0 THEN LockCookie + 1 767 ELSE LockCookie 768 END, 769 @itemShort = CASE Locked 770 WHEN 0 THEN SessionItemShort 771 ELSE NULL 772 END, 773 @textptr = CASE Locked 774 WHEN 0 THEN TEXTPTR(SessionItemLong) 775 ELSE NULL 776 END, 777 @length = CASE Locked 778 WHEN 0 THEN DATALENGTH(SessionItemLong) 779 ELSE NULL 780 END, 781 @locked = Locked, 782 Locked = 1 783 WHERE SessionId = @id 784 IF @length IS NOT NULL BEGIN 785 READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length 786 END 787 788 RETURN 0' 789 790 EXEC (@cmd) 791 GO 792 793 794 /*****************************************************************************/ 795 796 DECLARE @ver int 797 EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT 798 DECLARE @cmd nchar(4000) 799 IF (@ver >= 8) 800 SET @cmd = N' 801 CREATE PROCEDURE dbo.TempGetStateItemExclusive2 802 @id tSessionId, 803 @itemShort tSessionItemShort OUTPUT, 804 @locked bit OUTPUT, 805 @lockAge int OUTPUT, 806 @lockCookie int OUTPUT 807 AS 808 DECLARE @textptr AS tTextPtr 809 DECLARE @length AS int 810 DECLARE @now AS datetime 811 DECLARE @nowLocal AS datetime 812 813 SET @now = GETUTCDATE() 814 SET @nowLocal = GETDATE() 815 816 UPDATE [tempdb].dbo.ASPStateTempSessions 817 SET Expires = DATEADD(n, Timeout, @now), 818 LockDate = CASE Locked 819 WHEN 0 THEN @now 820 ELSE LockDate 821 END, 822 LockDateLocal = CASE Locked 823 WHEN 0 THEN @nowLocal 824 ELSE LockDateLocal 825 END, 826 @lockAge = CASE Locked 827 WHEN 0 THEN 0 828 ELSE DATEDIFF(second, LockDate, @now) 829 END, 830 @lockCookie = LockCookie = CASE Locked 831 WHEN 0 THEN LockCookie + 1 832 ELSE LockCookie 833 END, 834 @itemShort = CASE Locked 835 WHEN 0 THEN SessionItemShort 836 ELSE NULL 837 END, 838 @textptr = CASE Locked 839 WHEN 0 THEN TEXTPTR(SessionItemLong) 840 ELSE NULL 841 END, 842 @length = CASE Locked 843 WHEN 0 THEN DATALENGTH(SessionItemLong) 844 ELSE NULL 845 END, 846 @locked = Locked, 847 Locked = 1 848 WHERE SessionId = @id 849 IF @length IS NOT NULL BEGIN 850 READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length 851 END 852 853 RETURN 0' 854 855 EXEC (@cmd) 856 GO 857 858 859 /*****************************************************************************/ 860 861 DECLARE @ver int 862 EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT 863 DECLARE @cmd nchar(4000) 864 IF (@ver >= 8) 865 SET @cmd = N' 866 CREATE PROCEDURE dbo.TempGetStateItemExclusive3 867 @id tSessionId, 868 @itemShort tSessionItemShort OUTPUT, 869 @locked bit OUTPUT, 870 @lockAge int OUTPUT, 871 @lockCookie int OUTPUT, 872 @actionFlags int OUTPUT 873 AS 874 DECLARE @textptr AS tTextPtr 875 DECLARE @length AS int 876 DECLARE @now AS datetime 877 DECLARE @nowLocal AS datetime 878 879 SET @now = GETUTCDATE() 880 SET @nowLocal = GETDATE() 881 882 UPDATE [tempdb].dbo.ASPStateTempSessions 883 SET Expires = DATEADD(n, Timeout, @now), 884 LockDate = CASE Locked 885 WHEN 0 THEN @now 886 ELSE LockDate 887 END, 888 LockDateLocal = CASE Locked 889 WHEN 0 THEN @nowLocal 890 ELSE LockDateLocal 891 END, 892 @lockAge = CASE Locked 893 WHEN 0 THEN 0 894 ELSE DATEDIFF(second, LockDate, @now) 895 END, 896 @lockCookie = LockCookie = CASE Locked 897 WHEN 0 THEN LockCookie + 1 898 ELSE LockCookie 899 END, 900 @itemShort = CASE Locked 901 WHEN 0 THEN SessionItemShort 902 ELSE NULL 903 END, 904 @textptr = CASE Locked 905 WHEN 0 THEN TEXTPTR(SessionItemLong) 906 ELSE NULL 907 END, 908 @length = CASE Locked 909 WHEN 0 THEN DATALENGTH(SessionItemLong) 910 ELSE NULL 911 END, 912 @locked = Locked, 913 Locked = 1, 914 915 /* If the Uninitialized flag (0x1) if it is set, 916 remove it and return InitializeItem (0x1) in actionFlags */ 917 Flags = CASE 918 WHEN (Flags & 1) <> 0 THEN (Flags & ~1) 919 ELSE Flags 920 END, 921 @actionFlags = CASE 922 WHEN (Flags & 1) <> 0 THEN 1 923 ELSE 0 924 END 925 WHERE SessionId = @id 926 IF @length IS NOT NULL BEGIN 927 READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length 928 END 929 930 RETURN 0' 931 ELSE 932 SET @cmd = N' 933 CREATE PROCEDURE dbo.TempGetStateItemExclusive3 934 @id tSessionId, 935 @itemShort tSessionItemShort OUTPUT, 936 @locked bit OUTPUT, 937 @lockDate datetime OUTPUT, 938 @lockCookie int OUTPUT, 939 @actionFlags int OUTPUT 940 AS 941 DECLARE @textptr AS tTextPtr 942 DECLARE @length AS int 943 DECLARE @now AS datetime 944 945 SET @now = GETDATE() 946 UPDATE [tempdb].dbo.ASPStateTempSessions 947 SET Expires = DATEADD(n, Timeout, @now), 948 @lockDate = LockDate = CASE Locked 949 WHEN 0 THEN @now 950 ELSE LockDate 951 END, 952 @lockCookie = LockCookie = CASE Locked 953 WHEN 0 THEN LockCookie + 1 954 ELSE LockCookie 955 END, 956 @itemShort = CASE Locked 957 WHEN 0 THEN SessionItemShort 958 ELSE NULL 959 END, 960 @textptr = CASE Locked 961 WHEN 0 THEN TEXTPTR(SessionItemLong) 962 ELSE NULL 963 END, 964 @length = CASE Locked 965 WHEN 0 THEN DATALENGTH(SessionItemLong) 966 ELSE NULL 967 END, 968 @locked = Locked, 969 Locked = 1, 970 971 /* If the Uninitialized flag (0x1) if it is set, 972 remove it and return InitializeItem (0x1) in actionFlags */ 973 Flags = CASE 974 WHEN (Flags & 1) <> 0 THEN (Flags & ~1) 975 ELSE Flags 976 END, 977 @actionFlags = CASE 978 WHEN (Flags & 1) <> 0 THEN 1 979 ELSE 0 980 END 981 WHERE SessionId = @id 982 IF @length IS NOT NULL BEGIN 983 READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length 984 END 985 986 RETURN 0' 987 988 EXEC (@cmd) 989 GO 990 991 992 /*****************************************************************************/ 993 994 DECLARE @ver int 995 EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT 996 DECLARE @cmd nchar(4000) 997 IF (@ver >= 8) 998 SET @cmd = N' 999 CREATE PROCEDURE dbo.TempReleaseStateItemExclusive 1000 @id tSessionId, 1001 @lockCookie int 1002 AS 1003 UPDATE [tempdb].dbo.ASPStateTempSessions 1004 SET Expires = DATEADD(n, Timeout, GETUTCDATE()), 1005 Locked = 0 1006 WHERE SessionId = @id AND LockCookie = @lockCookie 1007 1008 RETURN 0' 1009 ELSE 1010 SET @cmd = N' 1011 CREATE PROCEDURE dbo.TempReleaseStateItemExclusive 1012 @id tSessionId, 1013 @lockCookie int 1014 AS 1015 UPDATE [tempdb].dbo.ASPStateTempSessions 1016 SET Expires = DATEADD(n, Timeout, GETDATE()), 1017 Locked = 0 1018 WHERE SessionId = @id AND LockCookie = @lockCookie 1019 1020 RETURN 0' 1021 1022 EXEC (@cmd) 1023 GO 1024 1025 1026 /*****************************************************************************/ 1027 1028 DECLARE @ver int 1029 EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT 1030 DECLARE @cmd nchar(4000) 1031 IF (@ver >= 8) 1032 SET @cmd = N' 1033 CREATE PROCEDURE dbo.TempInsertUninitializedItem 1034 @id tSessionId, 1035 @itemShort tSessionItemShort, 1036 @timeout int 1037 AS 1038 1039 DECLARE @now AS datetime 1040 DECLARE @nowLocal AS datetime 1041 1042 SET @now = GETUTCDATE() 1043 SET @nowLocal = GETDATE() 1044 1045 INSERT [tempdb].dbo.ASPStateTempSessions 1046 (SessionId, 1047 SessionItemShort, 1048 Timeout, 1049 Expires, 1050 Locked, 1051 LockDate, 1052 LockDateLocal, 1053 LockCookie, 1054 Flags) 1055 VALUES 1056 (@id, 1057 @itemShort, 1058 @timeout, 1059 DATEADD(n, @timeout, @now), 1060 0, 1061 @now, 1062 @nowLocal, 1063 1, 1064 1) 1065 1066 RETURN 0' 1067 ELSE 1068 SET @cmd = N' 1069 CREATE PROCEDURE dbo.TempInsertUninitializedItem 1070 @id tSessionId, 1071 @itemShort tSessionItemShort, 1072 @timeout int 1073 AS 1074 1075 DECLARE @now AS datetime 1076 SET @now = GETDATE() 1077 1078 INSERT [tempdb].dbo.ASPStateTempSessions 1079 (SessionId, 1080 SessionItemShort, 1081 Timeout, 1082 Expires, 1083 Locked, 1084 LockDate, 1085 LockCookie, 1086 Flags) 1087 VALUES 1088 (@id, 1089 @itemShort, 1090 @timeout, 1091 DATEADD(n, @timeout, @now), 1092 0, 1093 @now, 1094 1, 1095 1) 1096 1097 RETURN 0' 1098 1099 EXEC (@cmd) 1100 GO 1101 1102 1103 /*****************************************************************************/ 1104 1105 DECLARE @ver int 1106 EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT 1107 DECLARE @cmd nchar(4000) 1108 IF (@ver >= 8) 1109 SET @cmd = N' 1110 CREATE PROCEDURE dbo.TempInsertStateItemShort 1111 @id tSessionId, 1112 @itemShort tSessionItemShort, 1113 @timeout int 1114 AS 1115 1116 DECLARE @now AS datetime 1117 DECLARE @nowLocal AS datetime 1118 1119 SET @now = GETUTCDATE() 1120 SET @nowLocal = GETDATE() 1121 1122 INSERT [tempdb].dbo.ASPStateTempSessions 1123 (SessionId, 1124 SessionItemShort, 1125 Timeout, 1126 Expires, 1127 Locked, 1128 LockDate, 1129 LockDateLocal, 1130 LockCookie) 1131 VALUES 1132 (@id, 1133 @itemShort, 1134 @timeout, 1135 DATEADD(n, @timeout, @now), 1136 0, 1137 @now, 1138 @nowLocal, 1139 1) 1140 1141 RETURN 0' 1142 ELSE 1143 SET @cmd = N' 1144 CREATE PROCEDURE dbo.TempInsertStateItemShort 1145 @id tSessionId, 1146 @itemShort tSessionItemShort, 1147 @timeout int 1148 AS 1149 1150 DECLARE @now AS datetime 1151 SET @now = GETDATE() 1152 1153 INSERT [tempdb].dbo.ASPStateTempSessions 1154 (SessionId, 1155 SessionItemShort, 1156 Timeout, 1157 Expires, 1158 Locked, 1159 LockDate, 1160 LockCookie) 1161 VALUES 1162 (@id, 1163 @itemShort, 1164 @timeout, 1165 DATEADD(n, @timeout, @now), 1166 0, 1167 @now, 1168 1) 1169 1170 RETURN 0' 1171 1172 EXEC (@cmd) 1173 GO 1174 1175 1176 /*****************************************************************************/ 1177 1178 DECLARE @ver int 1179 EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT 1180 DECLARE @cmd nchar(4000) 1181 IF (@ver >= 8) 1182 SET @cmd = N' 1183 CREATE PROCEDURE dbo.TempInsertStateItemLong 1184 @id tSessionId, 1185 @itemLong tSessionItemLong, 1186 @timeout int 1187 AS 1188 DECLARE @now AS datetime 1189 DECLARE @nowLocal AS datetime 1190 1191 SET @now = GETUTCDATE() 1192 SET @nowLocal = GETDATE() 1193 1194 INSERT [tempdb].dbo.ASPStateTempSessions 1195 (SessionId, 1196 SessionItemLong, 1197 Timeout, 1198 Expires, 1199 Locked, 1200 LockDate, 1201 LockDateLocal, 1202 LockCookie) 1203 VALUES 1204 (@id, 1205 @itemLong, 1206 @timeout, 1207 DATEADD(n, @timeout, @now), 1208 0, 1209 @now, 1210 @nowLocal, 1211 1) 1212 1213 RETURN 0' 1214 ELSE 1215 SET @cmd = N' 1216 CREATE PROCEDURE dbo.TempInsertStateItemLong 1217 @id tSessionId, 1218 @itemLong tSessionItemLong, 1219 @timeout int 1220 AS 1221 DECLARE @now AS datetime 1222 SET @now = GETDATE() 1223 1224 INSERT [tempdb].dbo.ASPStateTempSessions 1225 (SessionId, 1226 SessionItemLong, 1227 Timeout, 1228 Expires, 1229 Locked, 1230 LockDate, 1231 LockCookie) 1232 VALUES 1233 (@id, 1234 @itemLong, 1235 @timeout, 1236 DATEADD(n, @timeout, @now), 1237 0, 1238 @now, 1239 1) 1240 1241 RETURN 0' 1242 1243 EXEC (@cmd) 1244 GO 1245 1246 1247 /*****************************************************************************/ 1248 1249 DECLARE @ver int 1250 EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT 1251 DECLARE @cmd nchar(4000) 1252 IF (@ver >= 8) 1253 SET @cmd = N' 1254 CREATE PROCEDURE dbo.TempUpdateStateItemShort 1255 @id tSessionId, 1256 @itemShort tSessionItemShort, 1257 @timeout int, 1258 @lockCookie int 1259 AS 1260 UPDATE [tempdb].dbo.ASPStateTempSessions 1261 SET Expires = DATEADD(n, @timeout, GETUTCDATE()), 1262 SessionItemShort = @itemShort, 1263 Timeout = @timeout, 1264 Locked = 0 1265 WHERE SessionId = @id AND LockCookie = @lockCookie 1266 1267 RETURN 0' 1268 ELSE 1269 SET @cmd = N' 1270 CREATE PROCEDURE dbo.TempUpdateStateItemShort 1271 @id tSessionId, 1272 @itemShort tSessionItemShort, 1273 @timeout int, 1274 @lockCookie int 1275 AS 1276 UPDATE [tempdb].dbo.ASPStateTempSessions 1277 SET Expires = DATEADD(n, @timeout, GETDATE()), 1278 SessionItemShort = @itemShort, 1279 Timeout = @timeout, 1280 Locked = 0 1281 WHERE SessionId = @id AND LockCookie = @lockCookie 1282 1283 RETURN 0' 1284 1285 EXEC (@cmd) 1286 GO 1287 1288 1289 /*****************************************************************************/ 1290 1291 DECLARE @ver int 1292 EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT 1293 DECLARE @cmd nchar(4000) 1294 IF (@ver >= 8) 1295 SET @cmd = N' 1296 CREATE PROCEDURE dbo.TempUpdateStateItemShortNullLong 1297 @id tSessionId, 1298 @itemShort tSessionItemShort, 1299 @timeout int, 1300 @lockCookie int 1301 AS 1302 UPDATE [tempdb].dbo.ASPStateTempSessions 1303 SET Expires = DATEADD(n, @timeout, GETUTCDATE()), 1304 SessionItemShort = @itemShort, 1305 SessionItemLong = NULL, 1306 Timeout = @timeout, 1307 Locked = 0 1308 WHERE SessionId = @id AND LockCookie = @lockCookie 1309 1310 RETURN 0' 1311 ELSE 1312 SET @cmd = N' 1313 CREATE PROCEDURE dbo.TempUpdateStateItemShortNullLong 1314 @id tSessionId, 1315 @itemShort tSessionItemShort, 1316 @timeout int, 1317 @lockCookie int 1318 AS 1319 UPDATE [tempdb].dbo.ASPStateTempSessions 1320 SET Expires = DATEADD(n, @timeout, GETDATE()), 1321 SessionItemShort = @itemShort, 1322 SessionItemLong = NULL, 1323 Timeout = @timeout, 1324 Locked = 0 1325 WHERE SessionId = @id AND LockCookie = @lockCookie 1326 1327 RETURN 0' 1328 1329 EXEC (@cmd) 1330 GO 1331 1332 1333 /*****************************************************************************/ 1334 1335 DECLARE @ver int 1336 EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT 1337 DECLARE @cmd nchar(4000) 1338 IF (@ver >= 8) 1339 SET @cmd = N' 1340 CREATE PROCEDURE dbo.TempUpdateStateItemLong 1341 @id tSessionId, 1342 @itemLong tSessionItemLong, 1343 @timeout int, 1344 @lockCookie int 1345 AS 1346 UPDATE [tempdb].dbo.ASPStateTempSessions 1347 SET Expires = DATEADD(n, @timeout, GETUTCDATE()), 1348 SessionItemLong = @itemLong, 1349 Timeout = @timeout, 1350 Locked = 0 1351 WHERE SessionId = @id AND LockCookie = @lockCookie 1352 1353 RETURN 0' 1354 ELSE 1355 SET @cmd = N' 1356 CREATE PROCEDURE dbo.TempUpdateStateItemLong 1357 @id tSessionId, 1358 @itemLong tSessionItemLong, 1359 @timeout int, 1360 @lockCookie int 1361 AS 1362 UPDATE [tempdb].dbo.ASPStateTempSessions 1363 SET Expires = DATEADD(n, @timeout, GETDATE()), 1364 SessionItemLong = @itemLong, 1365 Timeout = @timeout, 1366 Locked = 0 1367 WHERE SessionId = @id AND LockCookie = @lockCookie 1368 1369 RETURN 0' 1370 1371 EXEC (@cmd) 1372 GO 1373 1374 1375 /*****************************************************************************/ 1376 1377 DECLARE @ver int 1378 EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT 1379 DECLARE @cmd nchar(4000) 1380 IF (@ver >= 8) 1381 SET @cmd = N' 1382 CREATE PROCEDURE dbo.TempUpdateStateItemLongNullShort 1383 @id tSessionId, 1384 @itemLong tSessionItemLong, 1385 @timeout int, 1386 @lockCookie int 1387 AS 1388 UPDATE [tempdb].dbo.ASPStateTempSessions 1389 SET Expires = DATEADD(n, @timeout, GETUTCDATE()), 1390 SessionItemLong = @itemLong, 1391 SessionItemShort = NULL, 1392 Timeout = @timeout, 1393 Locked = 0 1394 WHERE SessionId = @id AND LockCookie = @lockCookie 1395 1396 RETURN 0' 1397 ELSE 1398 SET @cmd = N' 1399 CREATE PROCEDURE dbo.TempUpdateStateItemLongNullShort 1400 @id tSessionId, 1401 @itemLong tSessionItemLong, 1402 @timeout int, 1403 @lockCookie int 1404 AS 1405 UPDATE [tempdb].dbo.ASPStateTempSessions 1406 SET Expires = DATEADD(n, @timeout, GETDATE()), 1407 SessionItemLong = @itemLong, 1408 SessionItemShort = NULL, 1409 Timeout = @timeout, 1410 Locked = 0 1411 WHERE SessionId = @id AND LockCookie = @lockCookie 1412 1413 RETURN 0' 1414 1415 EXEC (@cmd) 1416 GO 1417 1418 /*****************************************************************************/ 1419 1420 DECLARE @cmd nchar(4000) 1421 SET @cmd = N' 1422 CREATE PROCEDURE dbo.TempRemoveStateItem 1423 @id tSessionId, 1424 @lockCookie int 1425 AS 1426 DELETE [tempdb].dbo.ASPStateTempSessions 1427 WHERE SessionId = @id AND LockCookie = @lockCookie 1428 RETURN 0' 1429 EXEC(@cmd) 1430 GO 1431 1432 /*****************************************************************************/ 1433 1434 DECLARE @ver int 1435 EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT 1436 DECLARE @cmd nchar(4000) 1437 IF (@ver >= 8) 1438 SET @cmd = N' 1439 CREATE PROCEDURE dbo.TempResetTimeout 1440 @id tSessionId 1441 AS 1442 UPDATE [tempdb].dbo.ASPStateTempSessions 1443 SET Expires = DATEADD(n, Timeout, GETUTCDATE()) 1444 WHERE SessionId = @id 1445 RETURN 0' 1446 ELSE 1447 SET @cmd = N' 1448 CREATE PROCEDURE dbo.TempResetTimeout 1449 @id tSessionId 1450 AS 1451 UPDATE [tempdb].dbo.ASPStateTempSessions 1452 SET Expires = DATEADD(n, Timeout, GETDATE()) 1453 WHERE SessionId = @id 1454 RETURN 0' 1455 1456 EXEC (@cmd) 1457 GO 1458 1459 1460 /*****************************************************************************/ 1461 1462 DECLARE @ver int 1463 EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT 1464 DECLARE @cmd nchar(4000) 1465 IF (@ver >= 8) 1466 SET @cmd = N' 1467 CREATE PROCEDURE dbo.DeleteExpiredSessions 1468 AS 1469 SET NOCOUNT ON 1470 SET DEADLOCK_PRIORITY LOW 1471 1472 DECLARE @now datetime 1473 SET @now = GETUTCDATE() 1474 1475 CREATE TABLE #tblExpiredSessions 1476 ( 1477 SessionID nvarchar(88) NOT NULL PRIMARY KEY 1478 ) 1479 1480 INSERT #tblExpiredSessions (SessionID) 1481 SELECT SessionID 1482 FROM [tempdb].dbo.ASPStateTempSessions WITH (READUNCOMMITTED) 1483 WHERE Expires < @now 1484 1485 IF @@ROWCOUNT <> 0 1486 BEGIN 1487 DECLARE ExpiredSessionCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY 1488 FOR SELECT SessionID FROM #tblExpiredSessions 1489 1490 DECLARE @SessionID nvarchar(88) 1491 1492 OPEN ExpiredSessionCursor 1493 1494 FETCH NEXT FROM ExpiredSessionCursor INTO @SessionID 1495 1496 WHILE @@FETCH_STATUS = 0 1497 BEGIN 1498 DELETE FROM [tempdb].dbo.ASPStateTempSessions WHERE SessionID = @SessionID AND Expires < @now 1499 FETCH NEXT FROM ExpiredSessionCursor INTO @SessionID 1500 END 1501 1502 CLOSE ExpiredSessionCursor 1503 1504 DEALLOCATE ExpiredSessionCursor 1505 1506 END 1507 1508 DROP TABLE #tblExpiredSessions 1509 1510 RETURN 0' 1511 ELSE 1512 SET @cmd = N' 1513 CREATE PROCEDURE dbo.DeleteExpiredSessions 1514 AS 1515 SET NOCOUNT ON 1516 SET DEADLOCK_PRIORITY LOW 1517 1518 DECLARE @now datetime 1519 SET @now = GETDATE() 1520 1521 CREATE TABLE #tblExpiredSessions 1522 ( 1523 SessionID nvarchar(88) NOT NULL PRIMARY KEY 1524 ) 1525 1526 INSERT #tblExpiredSessions (SessionID) 1527 SELECT SessionID 1528 FROM [tempdb].dbo.ASPStateTempSessions WITH (READUNCOMMITTED) 1529 WHERE Expires < @now 1530 1531 IF @@ROWCOUNT <> 0 1532 BEGIN 1533 DECLARE ExpiredSessionCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY 1534 FOR SELECT SessionID FROM #tblExpiredSessions 1535 1536 DECLARE @SessionID nvarchar(88) 1537 1538 OPEN ExpiredSessionCursor 1539 1540 FETCH NEXT FROM ExpiredSessionCursor INTO @SessionID 1541 1542 WHILE @@FETCH_STATUS = 0 1543 BEGIN 1544 DELETE FROM [tempdb].dbo.ASPStateTempSessions WHERE SessionID = @SessionID AND Expires < @now 1545 FETCH NEXT FROM ExpiredSessionCursor INTO @SessionID 1546 END 1547 1548 CLOSE ExpiredSessionCursor 1549 1550 DEALLOCATE ExpiredSessionCursor 1551 1552 END 1553 1554 DROP TABLE #tblExpiredSessions 1555 1556 RETURN 0' 1557 EXEC (@cmd) 1558 GO 1559 1560 /*****************************************************************************/ 1561 1562 EXECUTE dbo.CreateTempTables 1563 GO 1564 1565 USE master 1566 GO 1567 1568 DECLARE @sstype nvarchar(128) 1569 SET @sstype = N'sstype_temp' 1570 1571 IF UPPER(@sstype) = 'SSTYPE_TEMP' BEGIN 1572 DECLARE @cmd nchar(4000) 1573 1574 SET @cmd = N' 1575 /* Create the startup procedure */ 1576 CREATE PROCEDURE dbo.ASPState_Startup 1577 AS 1578 EXECUTE ASPState.dbo.CreateTempTables 1579 1580 RETURN 0' 1581 EXEC(@cmd) 1582 EXECUTE sp_procoption @ProcName='dbo.ASPState_Startup', @OptionName='startup', @OptionValue='true' 1583 END 1584 1585 /*****************************************************************************/ 1586 1587 /* Create the job to delete expired sessions */ 1588 1589 -- Add job category 1590 -- We expect an error if the category already exists. 1591 PRINT 'If the category already exists, an error from msdb.dbo.sp_add_category is expected.' 1592 EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]' 1593 GO 1594 1595 BEGIN TRANSACTION 1596 DECLARE @JobID BINARY(16) 1597 DECLARE @ReturnCode int 1598 DECLARE @nameT nchar(200) 1599 SELECT @ReturnCode = 0 1600 1601 -- Add the job 1602 SET @nameT = N'ASPState' + '_Job_DeleteExpiredSessions' 1603 EXECUTE @ReturnCode = msdb.dbo.sp_add_job 1604 @job_id = @JobID OUTPUT, 1605 @job_name = @nameT, 1606 @owner_login_name = NULL, 1607 @description = N'Deletes expired sessions from the session state database.', 1608 @category_name = N'[Uncategorized (Local)]', 1609 @enabled = 1, 1610 @notify_level_email = 0, 1611 @notify_level_page = 0, 1612 @notify_level_netsend = 0, 1613 @notify_level_eventlog = 0, 1614 @delete_level= 0 1615 1616 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 1617 1618 -- Add the job steps 1619 SET @nameT = N'ASPState' + '_JobStep_DeleteExpiredSessions' 1620 EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep 1621 @job_id = @JobID, 1622 @step_id = 1, 1623 @step_name = @nameT, 1624 @command = N'EXECUTE DeleteExpiredSessions', 1625 @database_name = N'ASPState', 1626 @server = N'', 1627 @subsystem = N'TSQL', 1628 @cmdexec_success_code = 0, 1629 @flags = 0, 1630 @retry_attempts = 0, 1631 @retry_interval = 1, 1632 @output_file_name = N'', 1633 @on_success_step_id = 0, 1634 @on_success_action = 1, 1635 @on_fail_step_id = 0, 1636 @on_fail_action = 2 1637 1638 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 1639 1640 EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_id = 1 1641 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 1642 1643 -- Add the job schedules 1644 SET @nameT = N'ASPState' + '_JobSchedule_DeleteExpiredSessions' 1645 EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule 1646 @job_id = @JobID, 1647 @name = @nameT, 1648 @enabled = 1, 1649 @freq_type = 4, 1650 @active_start_date = 20001016, 1651 @active_start_time = 0, 1652 @freq_interval = 1, 1653 @freq_subday_type = 4, 1654 @freq_subday_interval = 1, 1655 @freq_relative_interval = 0, 1656 @freq_recurrence_factor = 0, 1657 @active_end_date = 99991231, 1658 @active_end_time = 235959 1659 1660 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 1661 1662 -- Add the Target Servers 1663 EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_name = N'(local)' 1664 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 1665 1666 COMMIT TRANSACTION 1667 GOTO EndSave 1668 QuitWithRollback: 1669 IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION 1670 EndSave: 1671 GO 1672 1673 /*************************************************************/ 1674 /*************************************************************/ 1675 /*************************************************************/ 1676 /*************************************************************/ 1677 1678 PRINT '' 1679 PRINT '------------------------------------------' 1680 PRINT 'Completed execution of InstallSqlState.SQL' 1681 PRINT '------------------------------------------'
虽然会报错,但是不用管,没什么影响,之后会出现一个数据库
怎么测试就不说了,都是一样的,还有就是永久存储区的建立都是一样的, 只是内部会保存具体的信息,同时我们可以配合SQL代理
作业来自动删除失效的session对象.
这里不同进程间的通讯涉及到序列化问题,这里就不说了,里面有就很容易看出来。
好了,今天到此结束,休息一会去了。