|
|
|
Forum Member
      
участник
Last Login: 05.04.2007 15:08
Сообщ.: 27,
Visits: 299
|
|
есть ли какое нибудь ограничение на длинну сессии. проблема в том, что сайт берет информацию из БД SQL Server , при показе какого-то числа объектов, выбранных из базы сессия теряется. Т.Е. если я отображаю по 100 автомобилей на странице, они показываются но пользователь разлогинивается. если же например отображаю 50 машин, то все нормально и пользователь сохраняет свой логин необходимое время.
от чего такое может быть?
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
Каких-то явных ограничений (кроме объема памяти) нет, хотя, конечно, чем меньше хранится в сессии тем лучше.
На чем написан сайт? Покажи свой код вывода списка машин чтобы можно было понять каким образом его отображение завязанно на сессии. Также интересует каким образом сделана аутентфикация пользователя. Не зная всего этого тебе невозможно будет помочь.
|
|
|
|
|
Forum Member
      
участник
Last Login: 05.04.2007 15:08
Сообщ.: 27,
Visits: 299
|
|
сайт написан на asp+xslt+SQL Server 2000, весь выбор из бд производится при помощи разных user_defined_function, функция, которая в данном случае выбирает автомобили, работает нормально и выбирает все нужные машины:
CREATE FUNCTION dbo.[tis__SMmachinesVse](@sortField nvarchar(256), @sortOrder nvarchar(256))--, @type int
RETURNS TABLE
AS
RETURN select
sm.statusNum SMstatusNum,
SMmark.name SMmarkName,
mo.name SMmodelName,
..........
wo.name SMwholeName,
m.[id],
from SMmachine m
left join SMmodel mo on mo.id=m.SMmodel
.......
машин получается много и если показывать больше 50 на странице (так хочет заказчик), теряется пользователь.
при этом в сесии ничего не хранится, кроме текущего пользователя. Код asp вызывает выполнение данной функции и на основе этой выборки формируется xml-модель содержания страницы. после этого xslt представляет xml код в нужном виде уже на старнице.
выглядит это примерно так:
adminusergbEditoruser.........
все данные о пользователях хранятся в отдельных таблицах. система идентифицирует пользователя и хранит его логин в сессии.
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
Все это хорошо, но информации еще не достаточно. Покажи еще ASP код вызова функции и формирования xml.
И, кстати, почему используются UDF, а не хранимые процедуры?
|
|
|
|
|
Forum Member
      
участник
Last Login: 05.04.2007 15:08
Сообщ.: 27,
Visits: 299
|
|
в общем, в asp вызывается функция getObjectsAndPresent, которая описана отдельно как и все функции отдельно.
код asp выглядит так:
var sortField = "SMmarkName, SMmodelName, SMstatusNum";
var sortOrder = "asc";
appendAttribute(xmlDOM.documentElement, 'status', status);
var str = " "+q(sortField)+", "+q(sortOrder)+" ";
var customFilter = "SMstatusNum not in (8,18,23)";
getObjectsAndPresent(SMmachine, 'tis__SMmachinesVse',str, null, null, 50);
browseXML('SM/status-find');
функция getObjectsAndPresent выглядит так:
// Функция получения объектов и представления их в виде XML =====================================
function getObjectsAndPresent(objectConstructor, sqlFunctionName,sqlParam, nodeName, suffix, size........, customFilter)
{
var Obj = new objectConstructor();
var defaults = new Defaults();
if(suffix==null){suffix=''};
if(Obj.getDefaults) defaults = Obj.getDefaults();
if(nodeName==null) nodeName = defaults.listNodeName;
if(page==null&&page!=false) page = getParam('table'+suffix+'.page', defaults.page);
if(size==null&&size!=false) size = getParam('table'+suffix+'.size', defaults.size);
........
if(page==false) page = null;
if(size==false) size = null;
..........
var e = new List();
var eXml;
//Response.Write(page);
try{
e = getObjects(objectConstructor, sqlFunctionName, sqlParam, size, ......., customFilter);
}catch(ex){error(ex)}
if(typeof(nodeName)=='string'){
eXml = xmlDOM.documentElement.appendChild(xmlDOM.createElement(''+nodeName));
}else{
eXml = nodeName
};
if(Obj.isEditable()) appendAttribute(eXml, '_editable', 'true');
appendNavigateNode(eXml, e, size, page, ......, customFilter);
for(var i=0;i
return true;
}//getObjectsAndPresen
каждая таблица бд имеет в системе соответствующий класс, где прописаны как раз добавление, удаление, формирование xml и т.д. Для данного случая используется класс со следующими методами:
this.loadFromFullForm = function(prefix){
if(prefix==null) prefix='';
try{
this.id = getFromForm(prefix+'SMmachine.id');
this.SMmodel = getFromForm(prefix+'SMmachine.SMmodel');
this.SMYearMark = getFromForm(prefix+'SMmachine.SMYearMark');
this.integration = getFromForm(prefix+'SMmachine.integration');
.......
return this.id;
}catch(ex){fError(ex, "SMmachine.loadFromFullForm()");return false}
}//loadFromFullForm()
this.presentAsXML = function(parentNode, nodeName, xml){
try{
if(parentNode==null) parentNode = xmlDOM.documentElement;
if(nodeName==null) nodeName = 'SMmachine';
if(xml==null) xml = parentNode.ownerDocument;
var e = xml.createElement(nodeName);
var attrs = e.attributes;
appendAttribute(e, 'id', this.id);
appendAttribute(e, 'SMmarkName', this.SMmarkName);
appendAttribute(e, 'SMmodel', this.SMmodel);
appendAttribute(e, 'SMmodelName', this.SMmodelName);
appendAttribute(e, 'SMYearMark', this.SMYearMark);
appendAttribute(e, 'SMYearMarkName', this.SMYearMarkName);
appendAttribute(e, 'integration', this.integration);
...........
if(this.isEditable()) appendAttribute(e, '_editable', 'true');
parentNode.appendChild(e);
return e;
}catch(ex){fError(ex, 'SMmachine.presentAsXML()');return false}
}//presentAsXML
this.isEditable = function(){if(userIsEditor()) return true; return false}
this.isViewable = function(){return true}
this.getDefaults = function(){
var res = new Defaults();
res.objName = 'SMmachine';
res.nodeName = 'SMmachine';
res.listNodeName = 'SMmachines';
res.sqlParam = getParam('table-parent','null');
res.listFunctionName = 'tis__SMmachines';
res.sortField = sortField;
res.sortOrder = sortOrder;
res.size = '10';//количество элементов на странице по умолчанию
return res;
}//getDefaults
|
|
|
|
|
Forum Member
      
участник
Last Login: 05.04.2007 15:08
Сообщ.: 27,
Visits: 299
|
|
| !!!! теперь и при 50 вылетает :(
|
|
|
|