LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

JavaScript操作Cookies

admin
2010年8月18日 21:30 本文热度 3644

一直都是简单去js实现cookie的一些操作,今天把js对cookie操作系统的整理了一遍,包括:js读取cookie,js添加cookie,js删除cookie,示例如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
   <title>cookie处理函数练习(为我所写,非我所想:改善面向对象)</title>
   <script language="JavaScript" type="text/javascript">
   function addCookie(objName,objValue,objHours){//添加cookie
    var str = objName + "=" + escape(objValue);
    if(objHours > 0){//为0时不设定过期时间,浏览器关闭时cookie自动消失
     var date = new Date();
     var ms = objHours*3600*1000;
     date.setTime(date.getTime() + ms);
     str += "; expires=" + date.toGMTString();
    }
    document.cookie = str;
    alert("添加cookie成功");
   }
  
   function getCookie(objName){//获取指定名称的cookie的值
    var arrStr = document.cookie.split("; ");
    for(var i = 0;i < arrStr.length;i ++){
     var temp = arrStr[i].split("=");
     if(temp[0] == objName) return unescape(temp[1]);
    }
   }
  
   function delCookie(name){//为了删除指定名称的cookie,可以将其过期时间设定为一个过去的时间
    var date = new Date();
    date.setTime(date.getTime() - 10000);
    document.cookie = name + "=a; expires=" + date.toGMTString();
   }
  //读取出来所有的cookie字筗串了
   function allCookie(){//读取所有保存的cookie字符串
    var str = document.cookie;
    if(str == ""){
     str = "没有保存任何cookie";
    }
    alert(str);
   }
  
   function $(m,n){
    return document.forms[m].elements[n].value;
   }
  
   function add_(){
    var cookie_name = $("myform","cookie_name");
    var cookie_value = $("myform","cookie_value");
    var cookie_expireHours = $("myform","cookie_expiresHours");
    addCookie(cookie_name,cookie_value,cookie_expireHours);
   }
  
   function get_(){
    var cookie_name = $("myform","cookie_name");
    var cookie_value = getCookie(cookie_name);
    alert(cookie_value);
   }
  
   function del_(){
    var cookie_name = $("myform","cookie_name");
    delCookie(cookie_name);
    alert("删除成功");
   }
   </script>

//添加cookie
function addCookie(name,value,expires,path,domain){
 var str=name+"="+escape(value);
 if(expires!=""){
  var date=new Date();
  date.setTime(date.getTime()+expires*24*3600*1000);//expires单位为天
  str+=";expires="+date.toGMTString();
 }
 if(path!=""){
  str+=";path="+path;//指定可访问cookie的目录
 }
 if(domain!=""){
  str+=";domain="+domain;//指定可访问cookie的域
 }
 document.cookie=str;
}
//取得cookie
function getCookie(name){
 var str=document.cookie.split(";")
 for(var i=0;i<str.length;i++){
 var str2=str[i].split(”=”);
  if(str2[0]==name)return unescape(str2[1]);
 }
}
//删除cookie
function delCookie(name){
 var date=new Date();
 date.setTime(date.getTime()-10000);
 document.cookie=name+”=n;expire=”+date.toGMTString();




[下面讲的经个人觉得比较好哦!]
我们当然还得介绍cookie的四个属性。这些属性用下面的格式加到字符串值后面:

name=<value>[; expires=<date>][; domain=<domain>][; path=<path>][; secure]

名称=<值>[; expires=<日期>][; domain=<域>][; path=<路径>][; 安全]

<value>, <date>, <domain> 和 <path> 应当用对应的值替换。<date> 应当使用GMT格式,可以使用Javascript脚本语言的日期类Date的.toGMTString() 方法得到这一GMT格式的日期值。方括号代表这项是可选的。比如在 [; secure]两边的方括号代表要想把cookie设置成安全的,就需要把"; secure" 加到cookie字符串值的后面。如果"; secure" 没有加到cookie字符串后面,那么这个cookie就是不安全的。不要把尖括号<> 和方括号[] 加到cookie里(除非它们是某些值的内容)。设置属性时,不限属性,可以用任何顺序设置。

下面是一个例子,在这个例子里,cookie "username" 被设置成在15分钟之后过期,可以被服务器上的所有目录访问,可以被"mydomain.com"域里的所有服务器访问,安全状态为安全。
// Date() 的构造器设置以毫秒为单位
// .getTime() 方法返回时间,单位为毫秒
// 所以要设置15分钟到期,要用60000毫秒乘15分钟
var expiration = new Date((new Date()).getTime() + 15 * 60000);
document.cookie = "username=" + escape(form.username.value)+ "; expires ="
+ expiration.toGMTString() + "; path=" + "/" + "; _
domain=" + "mydomain.com" + "; secure";


// 我们定义一个函数,用来读取特定的cookie值。[得到指定名字的cookie对象哦!]
function getCookie(cookie_name)
{
var allcookies = document.cookie;
var cookie_pos = allcookies.indexOf(cookie_name);

// 如果找到了索引,就代表cookie存在,
// 反之,就说明不存在。
if (cookie_pos != -1)
{
// 把cookie_pos放在值的开始,只要给值加1即可。
cookie_pos += cookie_name.length + 1;
var cookie_end = allcookies.indexOf(";", cookie_pos);

if (cookie_end == -1)
{
cookie_end = allcookies.length;
}

var value = unescape(allcookies.substring(cookie_pos, cookie_end));
}

return value;
}

// 调用函数
var cookie_val = getCookie("username");


3.为什么我设置了cookie的过期时间如果为关闭的时候就自动清空的话怎么没用呢?
来研究一下JSP操纵cookie?
Cookie概念:
    Cookie的格式实际上是一段纯文本信息, 由服务器随着网页一起发送到客户端, 并保存在客户端硬盘中指定的目录的. 大家都传说Cookie会造成严重的安全威胁什么的, 其实不是这么回事情. 服务器读取Cookie的时候, 只能够读取到这个服务器相关的信息. 而且, 浏览器一般只允许存放300个Cookie, 每个站点最多存放20个, 而且, 每个Cookie的大小现在在4K, 根本不会占用多少空间. 并且, Cookie是有时效性质的. 例如, 设置了Cookie的存活时间为1分钟, 则一分钟后这个Cookie就会被浏览器删除

Cookie版本:
    目前有两个版本:
    版本0 : 由Netscape公司制定的,也被几乎所有的浏览器支持. Java中为了保持兼容性, 目前只支持到版本0, Cookie的内容中不能空格,方括号,圆括号,等于号(=),逗号,双引号,斜杠,问号,@符号,冒号,分号。
    版本1 : 根据RFC 2109文档制定的. 放宽了很多限制. 上面所限制的字符都可以使用. 但为了保持兼容性, 应该尽量避免使用这些特殊字符.

JSP中对Cookie的操作: 类型 方法名 方法解释 
String getComment() 返回cookie中注释,如果没有注释的话将返回空值. 
String getDomain() 返回cookie中Cookie适用的域名. 使用getDomain() 方法可以指示浏览器把Cookie返回给同 一域内的其他服务器,而通常 Cookie只返回给与发送它的服务器名字完全相同的服务器。注意域名必须以点开始 
int getMaxAge() 返回Cookie过期之前的最大时间,以秒计算。 
String getName() 返回Cookie的名字 
String getPath() 返回Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面所在目录及其子目录下 的所有页面。 
boolean getSecure() 如果浏览器通过安全协议发送cookies将返回true值,如果浏览器使用标准协议则返回false值。 
String getValue() 返回Cookie的值。笔者也将在后面详细介绍getValue/setValue。 
int getVersion() 返回Cookie所遵从的协议版本。 
void setComment(String purpose) 设置cookie中注释 
void setDomain(String pattern) 设置cookie中Cookie适用的域名  
void setMaxAge(int expiry) 以秒计算,设置Cookie过期时间。 
void setPath(String uri) 指定Cookie适用的路径。 
void setSecure(boolean flag) 指出浏览器使用的安全协议,例如HTTPS或SSL。 
void setValue(String newValue) cookie创建后设置一个新的值。 
void setVersion(int v) 设置Cookie所遵从的协议版本 

一个简单的例子
1. 写入Cookie --- writecookie.jsp
-------------------------------------------------------------
<%@ page contentType="text/html; charset=ISO8859_1" %>
<%
  Cookie _cookie=new Cookie("user_delfancom", "delfan");
  _cookie.setMaxAge(30*60); // 设置Cookie的存活时间为30分钟
  response.addCookie(_cookie); // 写入客户端硬盘
  out.print("写Cookie完成");
%>

2. 读取Cookie.jsp --- readcookie.jsp
-------------------------------------------------------------
<%
  Cookie cookies[]=request.getCookies(); // 将适用目录下所有Cookie读入并存入cookies数组中
  Cookie sCookie=null; 
  String sname=null;
  String name=null;
  if(cookies==null) // 如果没有任何cookie
    out.print("none any cookie");
  else
  {
    out.print(cookies.length + "<br>");
    for(int i=0;i<cookies.length; i++) // 循环列出所有可用的Cookie
    {
      sCookie=cookies[i];
      sname=sCookie.getName();
      name = sCookie.getValue();
      out.println(sname + "->" + name + "<br>");
    }
  } 
%>

需要注意的两个问题:
1. Cookie有个适用路径的问题, 就是说如果 writecookie.jsp和readcookie.jsp要放在同意目录下, 如果不在同一目录下, 则写的时候需要设置路径,为readcookie.jsp所在的路径.
2. 读入Cookie数组的时候需要判断是否为空(null), 网上很多代码都没有写出这一点. 

JS操纵Cookie?
  • function getCookie( name ) {
  • var start = document.cookie.indexOf( name + "=" );
  • var len = start + name.length + 1;
  • if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
  • return null;
  • }
  • if ( start == -1 ) return null;
  • var end = document.cookie.indexOf( ';', len );
  • if ( end == -1 ) end = document.cookie.length;
  • return unescape( document.cookie.substring( len, end ) );
  • }
  •  
  • function setCookie( name, value, expires, path, domain, secure ) {
  • var today = new Date();
  • today.setTime( today.getTime() );
  • if ( expires ) {
  • expires = expires * 1000 * 60 * 60 * 24;
  • }
  • var expires_date = new Date( today.getTime() + (expires) );
  • document.cookie = name+'='+escape( value ) +
  • ( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
  • ( ( path ) ? ';path=' + path : '' ) +
  • ( ( domain ) ? ';domain=' + domain : '' ) +
  • ( ( secure ) ? ';secure' : '' );
  • }
  •  
  • function deleteCookie( name, path, domain ) {
  • if ( getCookie( name ) ) document.cookie = name + '=' +
  • ( ( path ) ? ';path=' + path : '') +
  • ( ( domain ) ? ';domain=' + domain : '' ) +
  • ';expires=Thu, 01-Jan-1970 00:00:01 GMT';
  • }
  • 一会正常一会又不正常郁闷?

    [看看下面的JS控制时间的东西超级强悍!]


    1. //---------------------------------------------------  
    2. // 判断闰年  
    3. //---------------------------------------------------  
    4. Date.prototype.isLeapYear = function()   
    5. {   
    6.     return (0==this.getYear()%4&&((this.getYear()%100!=0)||(this.getYear()%400==0)));   
    7. }   
    8.   
    9. //---------------------------------------------------  
    10. // 日期格式化  
    11. // 格式 YYYY/yyyy/YY/yy 表示年份  
    12. // MM/M 月份  
    13. // W/w 星期  
    14. // dd/DD/d/D 日期  
    15. // hh/HH/h/H 时间  
    16. // mm/m 分钟  
    17. // ss/SS/s/S 秒  
    18. //---------------------------------------------------  
    19. Date.prototype.Format = function(formatStr)   
    20. {   
    21.     var str = formatStr;   
    22.     var Week = ['日','一','二','三','四','五','六'];  
    23.   
    24.     str=str.replace(/yyyy|YYYY/,this.getFullYear());   
    25.     str=str.replace(/yy|YY/,(this.getYear() % 100)>9?(this.getYear() % 100).toString():'0' + (this.getYear() % 100));   
    26.   
    27.     str=str.replace(/MM/,this.getMonth()>9?this.getMonth().toString():'0' + this.getMonth());   
    28.     str=str.replace(/M/g,this.getMonth());   
    29.   
    30.     str=str.replace(/w|W/g,Week[this.getDay()]);   
    31.   
    32.     str=str.replace(/dd|DD/,this.getDate()>9?this.getDate().toString():'0' + this.getDate());   
    33.     str=str.replace(/d|D/g,this.getDate());   
    34.   
    35.     str=str.replace(/hh|HH/,this.getHours()>9?this.getHours().toString():'0' + this.getHours());   
    36.     str=str.replace(/h|H/g,this.getHours());   
    37.     str=str.replace(/mm/,this.getMinutes()>9?this.getMinutes().toString():'0' + this.getMinutes());   
    38.     str=str.replace(/m/g,this.getMinutes());   
    39.   
    40.     str=str.replace(/ss|SS/,this.getSeconds()>9?this.getSeconds().toString():'0' + this.getSeconds());   
    41.     str=str.replace(/s|S/g,this.getSeconds());   
    42.   
    43.     return str;   
    44. }   
    45.   
    46. //+---------------------------------------------------  
    47. //| 求两个时间的天数差 日期格式为 YYYY-MM-dd   
    48. //+---------------------------------------------------  
    49. function daysBetween(DateOne,DateTwo)  
    50. {   
    51.     var OneMonth = DateOne.substring(5,DateOne.lastIndexOf ('-'));  
    52.     var OneDay = DateOne.substring(DateOne.length,DateOne.lastIndexOf ('-')+1);  
    53.     var OneYear = DateOne.substring(0,DateOne.indexOf ('-'));  
    54.   
    55.     var TwoMonth = DateTwo.substring(5,DateTwo.lastIndexOf ('-'));  
    56.     var TwoDay = DateTwo.substring(DateTwo.length,DateTwo.lastIndexOf ('-')+1);  
    57.     var TwoYear = DateTwo.substring(0,DateTwo.indexOf ('-'));  
    58.   
    59.     var cha=((Date.parse(OneMonth+'/'+OneDay+'/'+OneYear)- Date.parse(TwoMonth+'/'+TwoDay+'/'+TwoYear))/86400000);   
    60.     return Math.abs(cha);  
    61. }  
    62.   
    63.   
    64. //+---------------------------------------------------  
    65. //| 日期计算  
    66. //+---------------------------------------------------  
    67. Date.prototype.DateAdd = function(strInterval, Number) {   
    68.     var dtTmp = this;  
    69.     switch (strInterval) {   
    70.         case 's' :return new Date(Date.parse(dtTmp) + (1000 * Number));  
    71.         case 'n' :return new Date(Date.parse(dtTmp) + (60000 * Number));  
    72.         case 'h' :return new Date(Date.parse(dtTmp) + (3600000 * Number));  
    73.         case 'd' :return new Date(Date.parse(dtTmp) + (86400000 * Number));  
    74.         case 'w' :return new Date(Date.parse(dtTmp) + ((86400000 * 7) * Number));  
    75.         case 'q' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number*3, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());  
    76.         case 'm' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());  
    77.         case 'y' :return new Date((dtTmp.getFullYear() + Number), dtTmp.getMonth(), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());  
    78.     }  
    79. }  
    80.   
    81. //+---------------------------------------------------  
    82. //| 比较日期差 dtEnd 格式为日期型或者 有效日期格式字符串  
    83. //+---------------------------------------------------  
    84. Date.prototype.DateDiff = function(strInterval, dtEnd) {   
    85.     var dtStart = this;  
    86.     if (typeof dtEnd == 'string' )//如果是字符串转换为日期型  
    87.     {   
    88.         dtEnd = StringToDate(dtEnd);  
    89.     }  
    90.     switch (strInterval) {   
    91.         case 's' :return parseInt((dtEnd - dtStart) / 1000);  
    92.         case 'n' :return parseInt((dtEnd - dtStart) / 60000);  
    93.         case 'h' :return parseInt((dtEnd - dtStart) / 3600000);  
    94.         case 'd' :return parseInt((dtEnd - dtStart) / 86400000);  
    95.         case 'w' :return parseInt((dtEnd - dtStart) / (86400000 * 7));  
    96.         case 'm' :return (dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12) - (dtStart.getMonth()+1);  
    97.         case 'y' :return dtEnd.getFullYear() - dtStart.getFullYear();  
    98.     }  
    99. }  
    100.   
    101. //+---------------------------------------------------  
    102. //| 日期输出字符串,重载了系统的toString方法  
    103. //+---------------------------------------------------  
    104. Date.prototype.toString = function(showWeek)  
    105. {   
    106.     var myDate= this;  
    107.     var str = myDate.toLocaleDateString();  
    108.     if (showWeek)  
    109.     {   
    110.         var Week = ['日','一','二','三','四','五','六'];  
    111.         str += ' 星期' + Week[myDate.getDay()];  
    112.     }  
    113.     return str;  
    114. }  
    115.   
    116. //+---------------------------------------------------  
    117. //| 日期合法性验证  
    118. //| 格式为:YYYY-MM-DD或YYYY/MM/DD  
    119. //+---------------------------------------------------  
    120. function IsValidDate(DateStr)   
    121. {   
    122.     var sDate=DateStr.replace(/(^\s+|\s+$)/g,''); //去两边空格;   
    123.     if(sDate==''return true;   
    124.     //如果格式满足YYYY-(/)MM-(/)DD或YYYY-(/)M-(/)DD或YYYY-(/)M-(/)D或YYYY-(/)MM-(/)D就替换为''   
    125.     //数据库中,合法日期可以是:YYYY-MM/DD(2003-3/21),数据库会自动转换为YYYY-MM-DD格式   
    126.     var s = sDate.replace(/[\d]{ 4,4 }[\-/]{ 1 }[\d]{ 1,2 }[\-/]{ 1 }[\d]{ 1,2 }/g,'');   
    127.     if (s==''//说明格式满足YYYY-MM-DD或YYYY-M-DD或YYYY-M-D或YYYY-MM-D   
    128.     {   
    129.         var t=new Date(sDate.replace(/\-/g,'/'));   
    130.         var ar = sDate.split(/[-/:]/);   
    131.         if(ar[0] != t.getYear() || ar[1] != t.getMonth()+1 || ar[2] != t.getDate())   
    132.         {   
    133.             //alert('错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。');   
    134.             return false;   
    135.         }   
    136.     }   
    137.     else   
    138.     {   
    139.         //alert('错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。');   
    140.         return false;   
    141.     }   
    142.     return true;   
    143. }   
    144.   
    145. //+---------------------------------------------------  
    146. //| 日期时间检查  
    147. //| 格式为:YYYY-MM-DD HH:MM:SS  
    148. //+---------------------------------------------------  
    149. function CheckDateTime(str)  
    150. {   
    151.     var reg = /^(\d+)-(\d{ 1,2 })-(\d{ 1,2 }) (\d{ 1,2 }):(\d{ 1,2 }):(\d{ 1,2 })$/;   
    152.     var r = str.match(reg);   
    153.     if(r==null)return false;   
    154.     r[2]=r[2]-1;   
    155.     var d= new Date(r[1],r[2],r[3],r[4],r[5],r[6]);   
    156.     if(d.getFullYear()!=r[1])return false;   
    157.     if(d.getMonth()!=r[2])return false;   
    158.     if(d.getDate()!=r[3])return false;   
    159.     if(d.getHours()!=r[4])return false;   
    160.     if(d.getMinutes()!=r[5])return false;   
    161.     if(d.getSeconds()!=r[6])return false;   
    162.     return true;   
    163. }   
    164.   
    165. //+---------------------------------------------------  
    166. //| 把日期分割成数组  
    167. //+---------------------------------------------------  
    168. Date.prototype.toArray = function()  
    169. {   
    170.     var myDate = this;  
    171.     var myArray = Array();  
    172.     myArray[0] = myDate.getFullYear();  
    173.     myArray[1] = myDate.getMonth();  
    174.     myArray[2] = myDate.getDate();  
    175.     myArray[3] = myDate.getHours();  
    176.     myArray[4] = myDate.getMinutes();  
    177.     myArray[5] = myDate.getSeconds();  
    178.     return myArray;  
    179. }  
    180.   
    181. //+---------------------------------------------------  
    182. //| 取得日期数据信息  
    183. //| 参数 interval 表示数据类型  
    184. //| y 年 m月 d日 w星期 ww周 h时 n分 s秒  
    185. //+---------------------------------------------------  
    186. Date.prototype.DatePart = function(interval)  
    187. {   
    188.     var myDate = this;  
    189.     var partStr='';  
    190.     var Week = ['日','一','二','三','四','五','六'];  
    191.     switch (interval)  
    192.     {   
    193.         case 'y' :partStr = myDate.getFullYear();break;  
    194.         case 'm' :partStr = myDate.getMonth()+1;break;  
    195.         case 'd' :partStr = myDate.getDate();break;  
    196.         case 'w' :partStr = Week[myDate.getDay()];break;  
    197.         case 'ww' :partStr = myDate.WeekNumOfYear();break;  
    198.         case 'h' :partStr = myDate.getHours();break;  
    199.         case 'n' :partStr = myDate.getMinutes();break;  
    200.         case 's' :partStr = myDate.getSeconds();break;  
    201.     }  
    202.     return partStr;  
    203. }  
    204.   
    205. //+---------------------------------------------------  
    206. //| 取得当前日期所在月的最大天数  
    207. //+---------------------------------------------------  
    208. Date.prototype.MaxDayOfDate = function()  
    209. {   
    210.     var myDate = this;  
    211.     var ary = myDate.toArray();  
    212.     var date1 = (new Date(ary[0],ary[1]+1,1));  
    213.     var date2 = date1.dateAdd(1,'m',1);  
    214.     var result = dateDiff(date1.Format('yyyy-MM-dd'),date2.Format('yyyy-MM-dd'));  
    215.     return result;  
    216. }  
    217.   
    218. //+---------------------------------------------------  
    219. //| 取得当前日期所在周是一年中的第几周  
    220. //+---------------------------------------------------  
    221. Date.prototype.WeekNumOfYear = function()  
    222. {   
    223.     var myDate = this;  
    224.     var ary = myDate.toArray();  
    225.     var year = ary[0];  
    226.     var month = ary[1]+1;  
    227.     var day = ary[2];  
    228.     document.write('< script language=VBScript\> \n');  
    229.     document.write('myDate = DateValue(''+month+'-'+day+'-'+year+'') \n');  
    230.     document.write('result = DatePart('ww', myDate) \n');  
    231.     document.write(' \n');  
    232.     return result;  
    233. }  
    234.   
    235. //+---------------------------------------------------  
    236. //| 字符串转成日期类型   
    237. //| 格式 MM/dd/YYYY MM-dd-YYYY YYYY/MM/dd YYYY-MM-dd  
    238. //+---------------------------------------------------  
    239. function StringToDate(DateStr)  
    240. {   
    241.   
    242.     var converted = Date.parse(DateStr);  
    243.     var myDate = new Date(converted);  
    244.     if (isNaN(myDate))  
    245.     {   
    246.         //var delimCahar = DateStr.indexOf('/')!=-1?'/':'-';  
    247.         var arys= DateStr.split('-');  
    248.         myDate = new Date(arys[0],--arys[1],arys[2]);  
    249.     }  
    250.     return myDate;  



    该文章在 2010/8/18 21:30:49 编辑过
    关键字查询
    相关文章
    正在查询...
    点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
    点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
    点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
    点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
    Copyright 2010-2024 ClickSun All Rights Reserved