찾다
백엔드 개발PHP 튜토리얼PHP session使用经验汇总_PHP教程

什么是session

Session 的中文译名叫做“会话”,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个 session。目前社会上对 session 的理解非常混乱:有时候我们可以看到这样的话“在一个浏览器会话期间,...”,这里的会话是指从一个浏览器窗口打开到关闭这个期间; 也可以看到“用户(客户端)在一次会话期间”这样一句话,它可能指用户的一系列动作(一般情况下是同某个具体目的相关的一系列动作,比如从登录到选购商品到结账登出这样一个网上购物的过程;然而有时候也可能仅仅是指一次连接;其中的差别只能靠上下文来推断了。

然而当 session 一词与网络协议相关联时,它又往往隐含了“面向连接”和/或“保持状态”这样两个含义,“面向连接”指的是在通信双方在通信之前要先建立一个通信的渠道,比如打电话,直到对方接了电话通信才能开始。“保持状态”则是指通信的一方能够把一系列的消息关联起来,使得消息之间可以互相依赖,比如一个服务员能够认出再次光临的老顾客并且记得上次这个顾客还欠店里一块钱。这一类的例子有“ 一个TCP session ”或者“一个 POP3 session”。

鉴于这种混乱已不可改变,要为 session 下个定义就很难有统一的标准。而在阅读 session 相关资料时,我们也只有靠上下文来推断理解了。不过我们可以这样理解:例如我们打电话,从拨通的那一刻起到挂断电话期间,因为电话一直保持着接通的状态,所以把这种接通的状态叫做 session。它是访客与整个网站交互过程中一直存在的公有变量,在客户端不支持 COOKIE 的时候,为了保证数据正确、安全,就采用 SESSION 变量。访问网站的来客会被分配一个唯一的标识符,即所谓的会话 ID。它要么存放在客户端的 cookie,要么经由 URL 传递。

SESSION 的发明填补了 HTTP 协议的局限:HTTP协议被认为是无状态协议,无法得知用户的浏览状态,当它在服务端完成响应之后,服务器就失去了与该浏览器的联系。这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是独立的,好比一个顾客和一个自动售货机或者一个普通的(非会员制)大卖场之间的关系一样。

因此通过SESSION(cookie是另外一种解决办法)记录用户的有关信息,以供用户再次以此身份对web服务器提起请求时作确认。会话的发明使得一个用户在多个页面间切换时能够保存他的信息。网站编程人员都有这样的体会,每一页中的变量是不能在下一页中使用的(虽然form,url也可以实现,但这都是非常不理想的办法),而SESSION中注册的变量就可以作为全局变量使用了。

那么 SESSION 到底有什么用处呢?网上购物时大家都用过购物车,你可以随时把你选购的商品加入到购物车中,最后再去收银台结帐。在整个过程中购物车一直扮演着临时存贮被选商品的角色,用它追踪用户在网站上的活动情况,这就是 SESSION 的作用,它可以用于用户身份认证,程序状态记录,页面之间参数传递等。

SESSION 的实现中采用 COOKIE 技术,SESSION 会在客户端保存一个包含 session_id(SESSION编号)的 COOKIE;在服务器端保存其他 session 变量,比如 session_name 等等。当用户请求服务器时也把 session_id 一起发送到服务器,通过 session_id 提取所保存在服务器端的变量,就能识别用户是谁了。同时也不难理解为什么 SESSION 有时会失效了。

当客户端禁用 COOKIE 时(点击IE中的“工具”—“Internet选项”,在弹出的对话框里点击“安全”—“自定义级别”项,将“允许每个对话COOKIE”设为禁用),session_id 将无法传递,此时 SESSION 失效。不过 php5 在 linux/unix 平台可以自动检查 cookie 状态,如果客户端设置了禁用,则系统自动把 session_id 附加到 url 上传递。windows 主机则无此功能。

Session常见函数及用法

Session_start():开始一个会话或者返回已经存在的会话。

说明:这个函数没有参数,且返回值均为true。如果你使用基于cookie的session(cookie-based sessions),那么在使用Session_start()之前浏览器不能有任何输出,否则会发生以下错误:

Warning: Cannot send session cache limiter - headers already sent 
(output started at /usr/local/apache/htdocs/cga/member/1.php:2)…………  

你可以在 php.ini 里启动 session.auto_start=1,这样就无需每次使用 session 之前都要调用 session_start()。但启用该选项也有一些限制,如果确实启用了 session.auto_start,则不能将对象放入会话中,因为类定义必须在启动会话之前加载以在会话中重建对象。

请求结束后所有注册的变量都会被序列化。已注册但未定义的变量被标记为未定义。在之后的访问中这些变量也未被会话模块定义,除非用户以后定义它们。

警告:有些类型的数据不能被序列化因此也就不能保存在会话中。包括 resource 变量或者有循环引用的对象(即某对象将一个指向自己的引用传递给另一个对象)。

注册SESSION变量:

PHP5使用$_SESSION[‘xxx’]=xxx注册SESSION全局变量。和GET,POST,COOKIE的使用方法相似。

注意:session_register(),session_unregister ,session_is_registered在 php5 下不再使用,除非在 php.ini 里把register_globle 设为 on,不过出于安全考虑,强烈建议关闭 register_globle。HTTP_SESSION_VARS 也不提倡使用了,官方建议用 $_SESSION 代替之。例如:

Page1.php

<?php
Session_start();       //使用SESSION前必须调用该函数。
$_SESSION['name']="NowaMagic";   //注册一个SESSION变量
$_SESSION['passwd']="hellomagic";
$_SESSION['time']=time();
echo '<br />通过COOKIE传递SESSION';   //如果客户端支持cookie,可通过该链接传递session到下一页。
echo '<br />通过URL传递SESSION';//客户端不支持cookie时,使用该办法传递session.
?>  

Page2.php

<?php
session_start();
echo $_SESSION['name']; //
echo $_SESSION['passwd'];   //
echo date('Y m d H:i:s', $_SESSION['time']);
echo '<br />返回山一页';
?>  

有两种方法传递一个会话 ID:

一个是cookie,另一个是 URL 参数。

会话模块支持这两种方法。cookie 更优化,但由于不总是可用,也提供替代的方法。第二种方法直接将会话 ID 嵌入到 URL 中间去。 PHP 可以透明地转换连接。除非是使用 PHP 4.2 或更新版本,需要手工在编译 PHP 时激活。在 Unix 下,用 --enable-trans-sid 配置选项。如果此配置选项和运行时选项 session.use_trans_sid 都被激活(修改php.ini),相对 URI 将被自动修改为包含会话 ID。

  • session_id
  • session_id() 用于设定或取得当前 session_id。php5 中既可以使用 session_id(),也可以通过附加在 url 上的 SID 取得当前会话的 session_id 和 session_name。

    如果 session_id() 有具体指定值的话,将取代当前的 session_id 值。使用该函数前必须启动会话:session_start();

    当我们使用 session cookies 时,如果指定了一个 session_id() 值,每次启动 session_start() 都会往客户端发送一个cookie 值。不论当前 session_id 是否与指定值相等。

    session_id() 如果没有指定值,则返回当前 session_id();当前会话没有启动的话,则返回空字符串。

  • 检查 session 是否存在
  • 在以往的 php 版本中通常使用 session_is_register() 检查 session 是否存在,如果您使用 $_SESSION['XXX']=XXX 来注册会话变量,则 session_is_register() 函数不再起作用。你可以使用 isset($_SESSION['xxx']) 来替代。

  • 更改 session_id
  • session_regenerate_id() 更改成功则返回 true,失败则返回 false。 使用该函数可以为当前 session 更改 session_id,但不改变当前 session 的其他信息。例如:

    <?php
    session_start();
    $old_sessionid = session_id();
    session_regenerate_id();
    $new_sessionid = session_id();
    echo "原始 SessionID: $old_sessionid<br />";
    echo "新的 SessionID: $new_sessionid<br />";
    echo"<pre class="brush:php;toolbar:false">";
    print_r($_SESSION);
    echo"
    "; ?>

  • session_name()
  • 返回当前 session 的 name 或改变当前 session 的 name。如果要改变当前 session 的 name,必须在 session_start() 之前调用该函数。注意:session_name 不能只由数字组成,它至少包含一个字母。否则会在每时每刻都生成一个新的 session id。session 改名示例:

    <?php
    	$previous_name = session_name("WebsiteID");
    	echo "新的session名为: $previous_name";
    ?>    

  • 如何删除session
  • unset ($_SESSION['xxx']) 删除单个 session,unset($_SESSION['xxx']) 用来 unregister 一个已注册的 session 变量。其作用和 session_unregister() 相同。session_unregister() 在 PHP5 中不再使用,可将之打入冷宫。 unset($_SESSION) 此函数千万不可使用,它会将全局变量 $_SESSION 销毁,而且还没有可行的办法将其恢复。用户也不再可以注册 $_SESSION 变量。

    $_SESSION=array() 删除多个 session

    session_destroy() 结束当前的会话,并清空会话中的所有资源。该函数不会 unset (释放)和当前 session 相关的全局变量(globalvariables),也不会删除客户端的 session cookie。PHP 默认的 session 是基于 cookie 的,如果要删除 cookie 的话,必须借助 setcookie() 函数。返回值:布尔值。功能说明:这个函数结束当前的 session,此函数没有参数,且返回值均为 true。

    session_unset() 如果使用了 $_SESSION,则该函数不再起作用。由于 PHP5 必定要使用 $_SESSION,所以此函数可以打入冷宫了。

    下面是 PHP 官方关于删除 session 的案例:

    <?php
    	// 初始化session.
    	session_start();
    	/*** 删除所有的session变量..也可用unset($_SESSION[xxx])逐个删除。****/
    	$_SESSION = array();
    	/***删除sessin id.由于session默认是基于cookie的,所以使用setcookie删除包含session id的cookie.***/
    	if (isset($_COOKIE[session_name()])) 
    	{
       		setcookie(session_name(), '', time()-42000, '/');
    	}
    	// 最后彻底销毁session.
    	session_destroy();
    ?>    

由此我们可以得出删除Session的步骤:

  1. session_start();
  2. $_SESSION=array()/unset($_SESSION['xxx'])
  3. session_destroy()

SESSION安全:

会话模块不能保证存放在会话中的信息只能被创建该会话的用户看到。根据其存放的数据,还需要采取更多措施来主动保护会话的完整性。

评估会话中携带的数据并实施附加保护措施通常要付出代价,降低用户的方便程度。例如,如果要保护用户免于受简单的社交策略侵害(注:指在 URL 中显示的会话 ID 会被别人在电脑屏幕上看到,或被别的网站通过 HTTP Referer 得到等),则应该启用 session.use_only_cookies。此情形下,客户端必须无条件启用 cookie,否则会话就不工作。

有几种途径会将现有的会话 ID 泄露给第三方。泄露出的会话 ID 使第三方能够访问所有与指定 ID 相关联的资源。第一,URL 携带会话 ID。如果连接到外部站点,包含有会话 ID 的 URL 可能会被存在外部站点的 Referer 日志中。第二,较主动的攻击者可能会侦听网段的数据包。如果未加密,会话 ID 会以明文方式在网络中流过。对此的解决方式是在服务器上实施 SSL 并强制用户使用。

默认情况下,所有与特定会话相关的数据都被存储在由 INI 选项 session.save_path 指定的目录下的一个文件中。对每个会话会建立一个文件(不论是否有数据与该会话相关)。这是由于每打开一个会话即建立一个文件,不论是否有数据写入到该文件中。注意由于和文件系统协同工作的限制,此行为有个副作用,有可能造成用户定制的会话处理器(例如用数据库)丢失了未存储数据的会话。

上面介绍函数下文将会用到,但还有一些有关session的函数也介绍一下:

session_encode
函数功能:sesssion信息编码
函数原型:string session_encode(void);
返回值:字符串
功能说明:返回的字符串中包含全局变量中各变量的名称与值,形式如:
a|s:12:"it is a test";c|s:4:"lala"; 
a是变量名 s:12代表变量a的值"it is a test的长度是12 变量间用分号”;”分隔。  
session_decode
函数功能:sesssion信息解码
函数原型:boolean session_decode (string data)
返回值:布尔值
功能说明:这个函数可将session信息解码,成功则返回逻辑值true  

PHP5 不再使用 session_id,而是把它变成一个常量 SID,并保存在 cookie 中。如果客户端禁用了 cookie,php 会自动通过 url 自动传动传递 SID,其条件是设置 php.ini 中的 session.use_trans_sid = 1。此时即使客户端即使禁用了 cookie 也没关系了。用 strip_tags() 来输出 SID 以避免 XSS 相关的攻击。

Session跨页传递问题:

session跨页传递需要考虑三种情况:

  1. 客户端禁用了cookie。
  2. 浏览器出现问题,暂时无法存取cookie
  3. php.ini 中的 session.use_trans_sid = 0 或者编译时没有打开 --enable-trans-sid 选项

为什么会这样呢?下面解释一下原因:

Session 文件分为两部分:session 变量保存在服务器端(默认以文件方式存储 session);而 session id 则以 cookie 形式保存在客户端。(注意:session 默认是基于 cookie 的)。

当用户的浏览器向服务器提出请求时,同时发送包含 session id 的 cookie(默认情况下)。服务器根据客户端提供的 session id 来得到用户的文件,即保存在服务器端的 session 变量值。事实上,session id 可以使用客户端的 Cookie 或者 Http1.1 协议的 Query_String(就是访问的URL的“?”后面的部分)来传送给服务器,然后服务器读取 Session 的目录。也就是说,session id 是取得存储在服务上的 session 变量的身份证。当代码 session_start(); 运行的时候,就在服务器上产生了一个 session 文件,随之也产生了与之唯一对应的一个 session id,定义 session 变量以一定形式存储在刚才产生的 session 文件中。通过 session id,可以取出定义的变量。跨页后,为了使用 session,你必须又执行 session_start();将又会产生一个 session 文件,与之对应产生相应的 session id,用这个 session id 是取不出前面提到的第一个 session 文件中的变量的,因为这个session id 不是打开它的“钥匙”。如果在 session_start(); 之前加代码 session_id($session id);将不产生新的 session 文件,直接读取与这个 id对应的 session 文件。

PHP 中的 session 在默认情况下是使用客户端的 Cookie 来保存 session id 的,所以当客户端的 cookie 出现问题的时候就会影响session 了。必须注意的是:session 不一定必须依赖 cookie,这也是 session 相比 cookie 的高明之处。当客户端的 Cookie 被禁用或出现问题时,PHP 会自动把 session id 附着在 URL 中,这样再通过 session id 就能跨页使用 session 变量了。但这种附着也是有一定条件的,其一:“php.ini中的session.use_trans_sid = 1 或者编译时打开打开了 --enable-trans-sid 选项”;其二:运行 PHP 的服务器必须是 unix/linux 系统,windows 不具备此项功能。

明白了以上的道理,我们就可以得出解决session跨页传递问题的三条途径:

  1. 设置 php.ini 中的 session.use_trans_sid = 1 或者编译时打开打开了 --enable-trans-sid 选项,让 PHP 自动跨页传递 session id。
  2. 手动通过 URL 传值、隐藏表单传递 session id。
  3. 用文件、数据库等形式保存 session_id,在跨页过程中手动调用。

下面举例说明:

第一种情况:

page1.php

<?php
session_start();
$_SESSION['var1']="中华人民共和国";
$url="<a href="."\"s2.php\">下一页</a>";
echo $url;
?>  

page2.php

<?php
session_start();
echo "传递的session变量var1的值为:".$_SESSION['var1'];
?>  

运行以上代码,在客户端cookie正常的情况下,应该可以在得到结果“中华人民共和国”。

现在你手动关闭客户端的cookie,再运行,可能得不到结果了吧。如果得不到结果,再“设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项”,又得到结果“中华人民共和国”。

第二种途径:

s1.php

<?php
	session_start();
	$_SESSION['var1']="中华人民共和国";
	$sn = session_id();
	//PHP5定义了一个常量SID来表示session_id(),$url还可以写成$url='<a href="page2.php?' . SID . '">下一页</a>';
	$url="<a href="."\"s2.php?s=".$sn."\">下一页</a>";    
	echo $url;
?>  

s2.php

<?php
session_id($_GET['s']);
session_start();
echo "传递的session变量var1的值为:".$_SESSION['var1'];
?>  

第三种途径:

login.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Login</title>
<meta http-equiv="Content-Type" content="text/html; charset=??????">
</head>
<body>
请登录:
<form name="login" method="post" action="mylogin1.php">
用户名:<input type="text" name="name"><br>
口 令:<input type="password" name="pass"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
mylogin1.php
<?php
$name=$_POST['name'];
$pass=$_POST['pass'];
if(!$name || !$pass) {
    echo "用户名或密码为空,请<a href=\"login.html\">重新登录</a>";
    die();
}
if (!($name=="laogong" && $pass=="123")) {
    echo "用户名或密码不正确,请<a href=\"login.html\">重新登录</a>";
    die();
}
//注册用户
ob_start();
session_start();
$_SESSION['user']= $name;
$psid=session_id();
$fp=fopen("e:\\tmp\\phpsid.txt","w+");
fwrite($fp,$psid);
fclose($fp);
//身份验证成功,进行相关操作
echo "已登录<br>";
echo "<a href=\"mylogin2.php\">下一页</a>";
?>  

mylogin2.php

<?php
	$fp=fopen("e:\\tmp\\phpsid.txt","r");
	$sid=fread($fp,1024);
	fclose($fp);
	session_id($sid);
	session_start();
	if(isset($_SESSION['user']) && $_SESSION['user']="laogong" ) 
	{
     	echo "已登录!";
	}
	else 
	{
    	//成功登录进行相关操作
    	echo "未登录,无权访问";
    	echo "请<a href=\"login.html\">登录</a>后浏览";
    	die();
	}
?>  

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/752527.htmlTechArticle什么是session Session 的中文译名叫做“会话”,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这...
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
PHP의 초록 클래스 또는 인터페이스에 대한 특성과 언제 특성을 사용 하시겠습니까?PHP의 초록 클래스 또는 인터페이스에 대한 특성과 언제 특성을 사용 하시겠습니까?Apr 10, 2025 am 09:39 AM

PHP에서, 특성은 방법 재사용이 필요하지만 상속에 적합하지 않은 상황에 적합합니다. 1) 특성은 클래스에서 다중 상속의 복잡성을 피할 수 있도록 수많은 방법을 허용합니다. 2) 특성을 사용할 때는 대안과 키워드를 통해 해결할 수있는 방법 충돌에주의를 기울여야합니다. 3) 성능을 최적화하고 코드 유지 보수성을 향상시키기 위해 특성을 과도하게 사용해야하며 단일 책임을 유지해야합니다.

DIC (Dependency Injection Container) 란 무엇이며 PHP에서 사용하는 이유는 무엇입니까?DIC (Dependency Injection Container) 란 무엇이며 PHP에서 사용하는 이유는 무엇입니까?Apr 10, 2025 am 09:38 AM

의존성 주입 컨테이너 (DIC)는 PHP 프로젝트에 사용하기위한 객체 종속성을 관리하고 제공하는 도구입니다. DIC의 주요 이점에는 다음이 포함됩니다. 1. 디커플링, 구성 요소 독립적 인 코드는 유지 관리 및 테스트가 쉽습니다. 2. 유연성, 의존성을 교체 또는 수정하기 쉽습니다. 3. 테스트 가능성, 단위 테스트를 위해 모의 객체를 주입하기에 편리합니다.

SPL SplfixedArray 및 일반 PHP 어레이에 비해 성능 특성을 설명하십시오.SPL SplfixedArray 및 일반 PHP 어레이에 비해 성능 특성을 설명하십시오.Apr 10, 2025 am 09:37 AM

SplfixedArray는 PHP의 고정 크기 배열로, 고성능 및 메모리 사용이 필요한 시나리오에 적합합니다. 1) 동적 조정으로 인한 오버 헤드를 피하기 위해 생성 할 때 크기를 지정해야합니다. 2) C 언어 배열을 기반으로 메모리 및 빠른 액세스 속도를 직접 작동합니다. 3) 대규모 데이터 처리 및 메모리에 민감한 환경에 적합하지만 크기가 고정되어 있으므로주의해서 사용해야합니다.

PHP는 파일 업로드를 어떻게 단단히 처리합니까?PHP는 파일 업로드를 어떻게 단단히 처리합니까?Apr 10, 2025 am 09:37 AM

PHP는 $ \ _ 파일 변수를 통해 파일 업로드를 처리합니다. 보안을 보장하는 방법에는 다음이 포함됩니다. 1. 오류 확인 확인, 2. 파일 유형 및 크기 확인, 3 파일 덮어 쓰기 방지, 4. 파일을 영구 저장소 위치로 이동하십시오.

Null Coalescing 연산자 (??) 및 Null Coalescing 할당 연산자 (?? =)은 무엇입니까?Null Coalescing 연산자 (??) 및 Null Coalescing 할당 연산자 (?? =)은 무엇입니까?Apr 10, 2025 am 09:33 AM

JavaScript에서는 NullCoalescingOperator (??) 및 NullCoalescingAssignmentOperator (?? =)를 사용할 수 있습니다. 1. 2. ??= 변수를 오른쪽 피연산자의 값에 할당하지만 변수가 무효 또는 정의되지 않은 경우에만. 이 연산자는 코드 로직을 단순화하고 가독성과 성능을 향상시킵니다.

CSP (Content Security Policy) 헤더 란 무엇이며 왜 중요한가요?CSP (Content Security Policy) 헤더 란 무엇이며 왜 중요한가요?Apr 09, 2025 am 12:10 AM

CSP는 XSS 공격을 방지하고 리소스로드를 제한하여 웹 사이트 보안을 향상시킬 수 있기 때문에 중요합니다. 1.CSP는 HTTP 응답 헤더의 일부이며 엄격한 정책을 통해 악의적 인 행동을 제한합니다. 2. 기본 사용법은 동일한 원점에서 자원을로드 할 수있는 것입니다. 3. 고급 사용량은 특정 도메인 이름을 스크립트와 스타일로드 할 수 있도록하는 것과 같은보다 세밀한 전략을 설정할 수 있습니다. 4. Content-Security Policy 보고서 전용 헤더를 사용하여 CSP 정책을 디버그하고 최적화하십시오.

HTTP 요청 방법 (Get, Post, Put, Delete 등)이란 무엇이며 언제 각각을 사용해야합니까?HTTP 요청 방법 (Get, Post, Put, Delete 등)이란 무엇이며 언제 각각을 사용해야합니까?Apr 09, 2025 am 12:09 AM

HTTP 요청 방법에는 각각 리소스를 확보, 제출, 업데이트 및 삭제하는 데 사용되는 Get, Post, Put and Delete가 포함됩니다. 1. GET 방법은 리소스를 얻는 데 사용되며 읽기 작업에 적합합니다. 2. 게시물은 데이터를 제출하는 데 사용되며 종종 새로운 리소스를 만드는 데 사용됩니다. 3. PUT 방법은 리소스를 업데이트하는 데 사용되며 완전한 업데이트에 적합합니다. 4. 삭제 방법은 자원을 삭제하는 데 사용되며 삭제 작업에 적합합니다.

HTTPS 란 무엇이며 웹 애플리케이션에 중요한 이유는 무엇입니까?HTTPS 란 무엇이며 웹 애플리케이션에 중요한 이유는 무엇입니까?Apr 09, 2025 am 12:08 AM

HTTPS는 HTTP를 기반으로 보안 계층을 추가하는 프로토콜로, 주로 암호화 된 데이터를 통해 사용자 개인 정보 및 데이터 보안을 보호합니다. 작업 원칙에는 TLS 핸드 셰이크, 인증서 확인 및 암호화 된 커뮤니케이션이 포함됩니다. HTTP를 구현할 때는 인증서 관리, 성능 영향 및 혼합 콘텐츠 문제에주의를 기울여야합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기